Professional Documents
Culture Documents
simple!
Baruch Sadogursky
Consultant & Architect,
AlphaCSP
2
Copyright AlphaCSP Israel 2008 – Web Framework Playoff Seminar
Agenda
• Introduction
• Framework features
• Summary
3
Copyright AlphaCSP Israel 2008 – Web Framework Playoff Seminar
Introduction
4
Copyright AlphaCSP Israel 2008 – Web Framework Playoff Seminar
Intro::Wicket
5
Copyright AlphaCSP Israel 2008 – Web Framework Playoff Seminar
Intro::Apache Wicket
• Component–oriented
• Open Source
• Write HTML (HTML style)
• Write Java (Swing style)
• Tie them together through IDs
6
Copyright AlphaCSP Israel 2008 – Web Framework Playoff Seminar
Intro::Hello, World!
7
Copyright AlphaCSP Israel 2008 – Web Framework Playoff Seminar
Intro::Looks Familiar?
Wicket:
1 public class HelloWorld extends WebPage {
2 public HelloWorld() {
3 add(new Label("message", "Hello, World!"));
4 }
5 }
Swing:
1 public class HelloWorld extends JFrame {
2 public HelloWorld() {
3 add(new Label("Hello, World!"));
4 }
5 }
8
Copyright AlphaCSP Israel 2008 – Web Framework Playoff Seminar
Intro::History
Mar-04
Jonathan Locke envisioned and originated Wicket
Jun-05 Mar-06 Jul-07 Jan-08 Jun-08
May-05 Wicket 1.0 final Wicket 1.2 released Apache Wicket Wicket 1.3 released Wicket 1.4 m2
JavaOne presentation
Apr-04 Jul-04 Oct-04 Jan-05 Apr-05 Jul-05 Oct-05 Jan-06 Apr-06 Jul-06 Oct-06 Jan-07 Apr-07 Jul-07 Oct-07 Jan-08 Apr-08
Mar-04 Jun-08
9
Copyright AlphaCSP Israel 2008 – Web Framework Playoff Seminar
Intro::Wicket Hype
10
Copyright AlphaCSP Israel 2008 – Web Framework Playoff Seminar
Intro::Concepts – Component
11
Copyright AlphaCSP Israel 2008 – Web Framework Playoff Seminar
Intro:: Concepts – Components
Swing Wicket
awt.Component
Component
awt.Container
WebComponent MarkupContainer
awt.Window JContainer
awt.Frame JComponent
12
Copyright AlphaCSP Israel 2008 – Web Framework Playoff Seminar
Intro::Concepts – Model
13
Copyright AlphaCSP Israel 2008 – Web Framework Playoff Seminar
Intro::Concepts – Behavior
14
Copyright AlphaCSP Israel 2008 – Web Framework Playoff Seminar
Intro::Concepts
• Application
• Configure and init
• Example later
• Session
• Strongly typed HTTP session wrapper
• RequestCycle
• Represents the processing of a request
• Tells RequestCycleProcessor what to do
• How to handle events
• How to generate response
15
Copyright AlphaCSP Israel 2008 – Web Framework Playoff Seminar
Wicket Features Review
16
Copyright AlphaCSP Israel 2008 – Web Framework Playoff Seminar
Features::Configuration
17
Copyright AlphaCSP Israel 2008 – Web Framework Playoff Seminar
Features::View Technology
• Valid XHTML
• No custom markup (almost)
• wicket:id attribute
• The only mandatory one
• <wicket:message/> resource bundle
lookup
• See I18N
18
Copyright AlphaCSP Israel 2008 – Web Framework Playoff Seminar
Features::View Technology
1 <wicket:extend>
2 <div align="right" class="header" wicket:id="welcomePanel"></div>
3 <div class="phoneBook" align="center" wicket:id="searchPanel"></div>
4 <div class="phoneBook" align="center" wicket:id="resultsPanel"></div>
5 </wicket:extend>
19
Copyright AlphaCSP Israel 2008 – Web Framework Playoff Seminar
Features::View Technology
1 <wicket:panel>
2 <table>
3 <tr>
4 <td class="header"><wicket:message key="user"/>: <span wicket:id="username"></span></td>
5 <td class="headerSeperator">|</td>
6 <td class="header"><a href="#" wicket:id="logout"><wicket:message key="logout"/></a></td>
7 </tr>
8 </table>
9 </wicket:panel>
20
Copyright AlphaCSP Israel 2008 – Web Framework Playoff Seminar
Features::Page Flow
21
Copyright AlphaCSP Israel 2008 – Web Framework Playoff Seminar
Features::Form Binding
• Form is a component
• So, it is backed up with model
1 private SearchForm(MarkupContainer parent) {
2 super("searchForm", new CompoundPropertyModel(new Contact()));
3 parent.add(this);
4 add(new TextField("name"));
5 TextField emailTextField = new TextField("email");
6 emailTextField.add(EmailAddressValidator.getInstance());
7 add(emailTextField);
8 …
9 }
22
Copyright AlphaCSP Israel 2008 – Web Framework Playoff Seminar
Features::Table Sorting
23
Copyright AlphaCSP Israel 2008 – Web Framework Playoff Seminar
Features::Table Sorting
24
Copyright AlphaCSP Israel 2008 – Web Framework Playoff Seminar
Features::Pagination
25
Copyright AlphaCSP Israel 2008 – Web Framework Playoff Seminar
Features::Pagination
26
Copyright AlphaCSP Israel 2008 – Web Framework Playoff Seminar
Features::Validations (Server)
1 <tr>
2 <td colspan="2" class="feedback" wicket:id="feedback"/>
3 </tr>
27
Copyright AlphaCSP Israel 2008 – Web Framework Playoff Seminar
Features::Validations (Server)
28
Copyright AlphaCSP Israel 2008 – Web Framework Playoff Seminar
Features::Validations (Client)
29
Copyright AlphaCSP Israel 2008 – Web Framework Playoff Seminar
Features::Validations (Client)
30
Copyright AlphaCSP Israel 2008 – Web Framework Playoff Seminar
Features::AJAX
31
Copyright AlphaCSP Israel 2008 – Web Framework Playoff Seminar
Features::AJAX
32
Copyright AlphaCSP Israel 2008 – Web Framework Playoff Seminar
Features::AJAX
33
Copyright AlphaCSP Israel 2008 – Web Framework Playoff Seminar
Features::Error Handling – Dev
34
Copyright AlphaCSP Israel 2008 – Web Framework Playoff Seminar
Features::Error Handling – Prod
35
Copyright AlphaCSP Israel 2008 – Web Framework Playoff Seminar
Features::Error Handling – Prod
• onRuntimeException override in
RequestCycle
• In this case you get the actual
exception object
1 @Override
2 public RequestCycle newRequestCycle(Request request, Response response) {
3 return new WebRequestCycle(this, (WebRequest) request, response) {
4
5 @Override
6 public Page onRuntimeException(Page page, RuntimeException e) {
7 return new InternalErrorPage(e);
8 }
9 };
10 }
36
Copyright AlphaCSP Israel 2008 – Web Framework Playoff Seminar
Features::I18N Support
1 <tr>
2 <td valign=middle align=right width=25%><b><wicket:message key="username"/></b></td>
3 <td valign=middle>
4 <input class="loginField" type="text" id="username" size="25" tabindex=1
5 accessKey="u" wicket:id="username">
6 </td>
7 </tr>
37
Copyright AlphaCSP Israel 2008 – Web Framework Playoff Seminar
Features::L10N Support
38
Copyright AlphaCSP Israel 2008 – Web Framework Playoff Seminar
Features:: Documentation
• Source
• API documentation
• Nabble
• Forum & Mailing List
• Books
• Pro Wicket
• Wicket in Action
• Early Access available, in print next month
• Sites (see References)
39
Copyright AlphaCSP Israel 2008 – Web Framework Playoff Seminar
Summary
40
Copyright AlphaCSP Israel 2008 – Web Framework Playoff Seminar
Summary
Feature Summary
Configuration No XML!
View technology Valid XHTML Cut to pieces
Page flow No XML!
Form binding Swing-like models
Table sorting Eeeeasy
Pagination Eeeeasy
Validations No JS generation
AJAX Eeeeasy, but JS can be better
Error handling Powerful and configurable
I18n support Java resource bundles
Documentation Tons, can be organized better
41
Copyright AlphaCSP Israel 2008 – Web Framework Playoff Seminar
Summary::Java!
42
Copyright AlphaCSP Israel 2008 – Web Framework Playoff Seminar
Summary::Cons
43
Copyright AlphaCSP Israel 2008 – Web Framework Playoff Seminar
Summary::Cons
44
Copyright AlphaCSP Israel 2008 – Web Framework Playoff Seminar
Summary::The Future
• Wicket 1.4
• Generics
• Model<T>
• Component<T>
• M2 is available
• Wicket 1.5
• Multiple extend/child areas
• Proxy Model
• Strongly typed properties
• Tabbed browsers support
• Many more
45
Copyright AlphaCSP Israel 2008 – Web Framework Playoff Seminar
Summary:: References
• wicket.apache.org
• cwiki.apache.org/WICKET
• wicketstuff.org
• www.wicket-library.com
• issues.apache.org/jira/browse/WICKET
46
Copyright AlphaCSP Israel 2008 – Web Framework Playoff Seminar
Thank
You!
47
Copyright AlphaCSP Israel 2008 – Web Framework Playoff Seminar