View
6
Download
0
Category
Preview:
Citation preview
An in depth look atApache Wicket
Andrew LombardiOwner, Tech EvangelistMystic Coders, LLCandrew AT mysticcoders DOT com
kinabalu @ irc://irc.freenode.net - ##wicket, ##javakinabalu @ twitter
Tuesday, October 18, 11
Tuesday, October 18, 11
10 Years in business
Tuesday, October 18, 11
Software Consultants
10 Years in business
Tuesday, October 18, 11
Software Consultants
International Speaker
10 Years in business
Tuesday, October 18, 11
Software Consultants
International Speaker
Training
10 Years in business
Tuesday, October 18, 11
Software Consultants
International Speaker
Training
10 Years in business
Apache Wicket Contributor
Tuesday, October 18, 11
To our success!
Software Consultants
International Speaker
Training
10 Years in business
Apache Wicket Contributor
Tuesday, October 18, 11
Tuesday, October 18, 11
What is a Wicket?
Tuesday, October 18, 11
Tuesday, October 18, 11
Tuesday, October 18, 11
Tuesday, October 18, 11
Tuesday, October 18, 11
Wicket is a component-based web framework using Java and HTML.
Wicket is...
Tuesday, October 18, 11
What we’ll cover
Tuesday, October 18, 11
1. How to get started
What we’ll cover
Tuesday, October 18, 11
1. How to get started2. Building your first app
What we’ll cover
Tuesday, October 18, 11
1. How to get started2. Building your first app3. Further Resources
What we’ll cover
Tuesday, October 18, 11
The Cooking show model
Tuesday, October 18, 11
Why Wicket ?
Tuesday, October 18, 11
Version 1.0 in June 2005
Tuesday, October 18, 11
+
Top Level Project June 2007
Tuesday, October 18, 11
(optional)
Tuesday, October 18, 11
That’s it.
(optional)
Tuesday, October 18, 11
And many more...Tuesday, October 18, 11
Who uses it?
Tuesday, October 18, 11
Who uses it?
Tuesday, October 18, 11
http://cwe.mitre.org/top25/
Security Best Practices
"Cross-site scripting is the practice of embedding malicious scriptinto a Web page that can execute when users visit the page. To wardoff such attacks, the report recommends using frameworks and librariesto control output, including "[...] Apache Wicket." Programmers should usestrong character encoding and set the browser cookie session toHttpOnly."
Tuesday, October 18, 11
Community
• Part of the Apache Software Foundation• VERY active mailing list• ##wicket on irc.freenode.net
Tuesday, October 18, 11
Wicket Components
Tuesday, October 18, 11
Wicket Components
Tuesday, October 18, 11
Wicket Components
+
Tuesday, October 18, 11
Wicket Components
+
Tuesday, October 18, 11
Wicket is just Java
Tuesday, October 18, 11
• Components are objects (use extends)
Wicket is just Java
Tuesday, October 18, 11
• Components are objects (use extends)• Sparse use of annotations
Wicket is just Java
Tuesday, October 18, 11
• Components are objects (use extends)• Sparse use of annotations• Not framework managed (use new)
Wicket is just Java
Tuesday, October 18, 11
Wicket is just HTML
Tuesday, October 18, 11
• Designer friendly
Wicket is just HTML
Tuesday, October 18, 11
• Designer friendly• No scriptlets in HTML
Wicket is just HTML
Tuesday, October 18, 11
• Designer friendly• No scriptlets in HTML• Developers won’t ruin pixel perfection
Wicket is just HTML
Tuesday, October 18, 11
• Designer friendly• No scriptlets in HTML• Developers won’t ruin pixel perfection• Designers won’t screw up your tags
Wicket is just HTML
Tuesday, October 18, 11
Tuesday, October 18, 11
Tuesday, October 18, 11
Tuesday, October 18, 11
Tuesday, October 18, 11
Tuesday, October 18, 11
No XML
Tuesday, October 18, 11
Tuesday, October 18, 11
wicket-quickstart or the Wicket maven archetype headstart
Tuesday, October 18, 11
mvn archetype:create -DarchetypeGroupId=org.apache.wicket
-DarchetypeArtifactId=wicket-archetype-quickstart -DarchetypeVersion=1.4.1 -DgroupId=com.mycompany -DartifactId=myproject
or
wicket-quickstart module
http://wicket.apache.org/quickstart.html
Tuesday, October 18, 11
Tuesday, October 18, 11
Tuesday, October 18, 11
Quickstart
DEMOTuesday, October 18, 11
Tuesday, October 18, 11
Hello, World!
Tuesday, October 18, 11
<h1>Hello, World!</h1>
Hello, World!
Tuesday, October 18, 11
<h1 wicket:id=”message”>[label text]</h1>
Hello, World!
Tuesday, October 18, 11
<h1 wicket:id=”message”>[label text]</h1>
add(new Label(“message”, “Hello, World!”));
+
Hello, World!
Tuesday, October 18, 11
+
=
<h1>Hello, World!</h1>
<h1 wicket:id=”message”>[label text]</h1>
add(new Label(“message”, “Hello, World!”));
Hello, World!
Tuesday, October 18, 11
<html xmlns:wicket=”http://wicket.apache.org”> <head> <title>Home Page</title> </head> <body> <h1 wicket:id=”message”>[label text]</h1> </body></html>
Hello, World!
Tuesday, October 18, 11
import org.apache.wicket.markup.html.WebPage;import org.apache.wicket.markup.html.basic.Label;
public class HomePage extends WebPage {public HomePage() {
add(new Label(“message”, “Hello, World!”);}
}
Hello, World!
Tuesday, October 18, 11
Application class
Tuesday, October 18, 11
•Mount bookmarkable pages
Application class
Tuesday, October 18, 11
•Mount bookmarkable pages•Spring/Guice Integration
Application class
Tuesday, October 18, 11
•Mount bookmarkable pages•Spring/Guice Integration•Custom WebSession implementation
Application class
Tuesday, October 18, 11
•Mount bookmarkable pages•Spring/Guice Integration•Custom WebSession implementation•Authentication strategies
Application class
Tuesday, October 18, 11
•Mount bookmarkable pages•Spring/Guice Integration•Custom WebSession implementation•Authentication strategies•Custom URL mounts
Application class
Tuesday, October 18, 11
•Mount bookmarkable pages•Spring/Guice Integration•Custom WebSession implementation•Authentication strategies•Custom URL mounts•Resource mounting
Application class
Tuesday, October 18, 11
•Mount bookmarkable pages•Spring/Guice Integration•Custom WebSession implementation•Authentication strategies•Custom URL mounts•Resource mounting•Refactorable
Application class
Tuesday, October 18, 11
•Mount bookmarkable pages•Spring/Guice Integration•Custom WebSession implementation•Authentication strategies•Custom URL mounts•Resource mounting•Refactorable•Debuggable
Application class
Tuesday, October 18, 11
Page layout in Wicket allows you to inherit and use composition for markup
Tuesday, October 18, 11
* Username
Login
* Password
Login
Tuesday, October 18, 11
* Username
Login
* Password
Login
Tuesday, October 18, 11
* Username
Login
* Password
Login
Tuesday, October 18, 11
Markup inheritance
DEMOTuesday, October 18, 11
Tuesday, October 18, 11
Markup Inheritance
Tuesday, October 18, 11
• Easy templating
Markup Inheritance
Tuesday, October 18, 11
• Easy templating• Smart header contribution
Markup Inheritance
Tuesday, October 18, 11
• Easy templating• Smart header contribution• Mix and match components and panel
Markup Inheritance
Tuesday, October 18, 11
• Easy templating• Smart header contribution• Mix and match components and panel• Usable with Panel’s as well
Markup Inheritance
Tuesday, October 18, 11
Forms in Wicket allow you to accept, process and validate user input.
Tuesday, October 18, 11
Button
TextField, TextArea
CheckBox, CheckGroup, Check
Form Components
DropDownChoice
ListChoice
RadioGroup
RadioChoice
Tuesday, October 18, 11
Start onSubmit
onError
required check
pushinput
validate input
convertinput
fail fail fail
Form Processing Flow
Tuesday, October 18, 11
Form
DEMOTuesday, October 18, 11
Tuesday, October 18, 11
“Computer Science is a science of abstraction - creating the right model for a problem and devising the appropriate mechanizable techniques to solve it.”
-A Aho & J. Ullman
Tuesday, October 18, 11
A Model in Wicket allows components to retrieve and store data.
Tuesday, October 18, 11
idComponent
getObject():TsetObject(T)
<<interface>>IModel<T>
Label TextField<T> Page
Tuesday, October 18, 11
Flow of Model DataMystic Paste
Paste
Controller
View
TextArea
Locator
IModel
Model
PasteItemcontent
Receives
Sets
Sets
Gets
Gets
Renders
Tuesday, October 18, 11
Not using models?
new Label("street", ! ! customer.getAddress().getStreet());
•Label doesn’t get notified if address / street / customer changes•Possible NullPointerException if customer or address is null
Tuesday, October 18, 11
PropertyModel saves the day
new Label("street", ! ! new PropertyModel(customer, “address.street”));
Tuesday, October 18, 11
PropertyModel saves the day
new Label("street", ! ! new PropertyModel(customer, “address.street”));
•Safe from NullPointerException’s•Dynamic
Tuesday, October 18, 11
PropertyModel
DEMOTuesday, October 18, 11
Tuesday, October 18, 11
Model Description
Model Simple model used to store static content, or used as a base class for dynamic behavior.
PropertyModel Uses a property expression to dynamically access a property of your domain objects.
CompoundPropertyModel Uses component identifiers as property expressions to bind components to its domain objects.
LoadableDetachableModel Abstract model for quickly creating detachable models.
ResourceModel Easy-to-use model for retrieving messages from resource bundles.
StringResourceModel Advanced model for retrieving messages from resource bundles; supports property expressions and MessageFormat substitutions.
Wicket Core Models
Tuesday, October 18, 11
Session usage in Wicket is managed by detaching unnecessary objects.
Tuesday, October 18, 11
detach()
<<Interface>>IDetachable
value : SerializableModel<T>
getObject():TsetObject(T)
<<Interface>>IModel
Tuesday, October 18, 11
LoadableDetachableModelnew ViewPaste(new Model(pasteItem)) new ViewPaste(new DetachablePasteModel
(pasteItem))
Session
PasteItem ObjectLarge
ViewPaste
Session
IdentifierSmall
ViewPaste
Tuesday, October 18, 11
private class DetachedPasteModel extends LoadableDetachableModel<PasteItem> {
!! String id;!! public DetachedPasteModel(String id) {! ! this.id = id;! }!! protected PasteItem load() {! ! try {! ! ! return pasteService.getItem("web", Long.parseLong(id));! ! } catch (InvalidClientException e) {! ! ! e.printStackTrace();! ! }! ! return null;! }}
Tuesday, October 18, 11
Nested Modelspublic class DefaultWhenNullModel<T> implements IModel<T> {! private static final long serialVersionUID = 1L;
! private final IModel<T> nestedModel; ! private final T defaultValue;
! public DefaultWhenNullModel(IModel<T> nestedModel, T defaultValue) { ! ! this.nestedModel = nestedModel; ! ! this.defaultValue = defaultValue; ! }
! public T getObject() { ! ! T val = nestedModel.getObject(); ! ! return val == null ? defaultValue : val; ! }
! public void setObject(T object) { ! ! nestedModel.setObject(object); ! }
! public void detach() { ! ! nestedModel.detach(); ! } }
Tuesday, October 18, 11
Nested Models
Form form = new Form( new CompoundPropertyModel<Profile>( new ProfileDetachableModel()));
form.add(new TextField("firstName"));
Tuesday, October 18, 11
StringResourceModel
Profile profile = new Profile();profile.setFirstName("Werner");profile.setLastName("Brandis");
add(new Label("verifyMessage",! ! new StringResourceModel("verify.message", this, new Model(profile)));
MyPage.java
MyPage.properties
verify.message=Hi. My name is ${firstName} ${lastName}. My voice is my passport. Verify me.
Tuesday, October 18, 11
Form Validation in Wicket is attached to components or the form.
Tuesday, October 18, 11
NumberValidator - Validate’s max, min, range for a Number
StringValidator - Validate’s max, min, length for a String
PatternValidator - Validate’s the String input matches theregex pattern
Wicket Validators
EmailAddressValidator - Validate’s field contains a valid email
EqualPasswordInputValidator - Form validation of twopassword fields being equal
Tuesday, October 18, 11
Form Validation
DEMOTuesday, October 18, 11
Tuesday, October 18, 11
FeedbackMessages
Tuesday, October 18, 11
• Page class
FeedbackMessages
Tuesday, October 18, 11
• Page class• Component class
FeedbackMessages
Tuesday, October 18, 11
• Page class• Component class• Application class
FeedbackMessages
Tuesday, October 18, 11
• Page class• Component class• Application class• Application base class
FeedbackMessages
Tuesday, October 18, 11
ComponentFeedbackMessageFilter - Gives only messages for a specific component
ContainerFeedbackMessageFilter - Gives only messages for a specific container component and its children
ErrorLevelFeedbackMessageFilter - Gives only messages at a certain level (or higher)
FeedbackPanel
Tuesday, October 18, 11
Repeaters in Wicket allow you to show blocks of markup multiple times.
Tuesday, October 18, 11
Repeaters
Tuesday, October 18, 11
• RepeatingView
Repeaters
Tuesday, October 18, 11
• RepeatingView• RefreshingView
Repeaters
Tuesday, October 18, 11
• RepeatingView• RefreshingView• ListView
Repeaters
Tuesday, October 18, 11
• RepeatingView• RefreshingView• ListView• DataView
Repeaters
Tuesday, October 18, 11
• RepeatingView• RefreshingView• ListView• DataView• GridView
Repeaters
Tuesday, October 18, 11
• RepeatingView• RefreshingView• ListView• DataView• GridView• DataTable
Repeaters
Tuesday, October 18, 11
DataTable is an example of an easily reusable and customizable component
Tuesday, October 18, 11
Tuesday, October 18, 11
Pageable
Tuesday, October 18, 11
Pageable
Sortable
Tuesday, October 18, 11
Pageable
Sortable
Searchable
Tuesday, October 18, 11
Pageable
Sortable
Searchable
Easy to Style
Tuesday, October 18, 11
Pageable
Sortable
Searchable
Easy to Style
Filterable
Tuesday, October 18, 11
ListView
DEMOTuesday, October 18, 11
Tuesday, October 18, 11
Behaviors in Wicket are decorators for components.
Tuesday, October 18, 11
Behavior
DEMOTuesday, October 18, 11
Tuesday, October 18, 11
Behaviors
Tuesday, October 18, 11
• Can manipulate component tags
Behaviors
Tuesday, October 18, 11
• Can manipulate component tags• Add custom Javascript to components
Behaviors
Tuesday, October 18, 11
• Can manipulate component tags• Add custom Javascript to components• Add AJAX behavior to components
Behaviors
Tuesday, October 18, 11
Adding Javascript to a component
DEMOTuesday, October 18, 11
Tuesday, October 18, 11
Using WicketTester and FormTester to unit test our Wicket application.
Tuesday, October 18, 11
WicketTester
Tuesday, October 18, 11
•Test Pages and components outside of container
WicketTester
Tuesday, October 18, 11
•Test Pages and components outside of container•Test Forms
WicketTester
Tuesday, October 18, 11
•Test Pages and components outside of container•Test Forms•Test AJAX interactions
WicketTester
Tuesday, October 18, 11
•Test Pages and components outside of container•Test Forms•Test AJAX interactions•Can run against any build tool that supports JUnit or TestNG
WicketTester
Tuesday, October 18, 11
Simple page test
DEMOTuesday, October 18, 11
Tuesday, October 18, 11
Click counter test
DEMOTuesday, October 18, 11
Tuesday, October 18, 11
Search Form test
DEMOTuesday, October 18, 11
Tuesday, October 18, 11
Search Form testw/ error
DEMOTuesday, October 18, 11
Tuesday, October 18, 11
“Our team has been able to cut the LOC count by a factor of about 10 (!) moving from a JSP Based Framework to Wicket...”
-Leo Erlandsson
Tuesday, October 18, 11
Quick framework comparison
Tuesday, October 18, 11
GWT
Tuesday, October 18, 11
GWT• Pro
Tuesday, October 18, 11
GWT• Pro
• Use Java for client-side Javascript
Tuesday, October 18, 11
GWT• Pro
• Use Java for client-side Javascript• Can send complex Java objects to client from server
Tuesday, October 18, 11
GWT• Pro
• Use Java for client-side Javascript• Can send complex Java objects to client from server• Scalable since state is on server
Tuesday, October 18, 11
GWT• Pro
• Use Java for client-side Javascript• Can send complex Java objects to client from server• Scalable since state is on server• Rich widget library
Tuesday, October 18, 11
GWT• Pro
• Use Java for client-side Javascript• Can send complex Java objects to client from server• Scalable since state is on server• Rich widget library• Simple for AJAX
Tuesday, October 18, 11
GWT• Pro
• Use Java for client-side Javascript• Can send complex Java objects to client from server• Scalable since state is on server• Rich widget library• Simple for AJAX
• Con
Tuesday, October 18, 11
GWT• Pro
• Use Java for client-side Javascript• Can send complex Java objects to client from server• Scalable since state is on server• Rich widget library• Simple for AJAX
• Con• SEO unfriendly
Tuesday, October 18, 11
GWT• Pro
• Use Java for client-side Javascript• Can send complex Java objects to client from server• Scalable since state is on server• Rich widget library• Simple for AJAX
• Con• SEO unfriendly• Difficult to test
Tuesday, October 18, 11
GWT• Pro
• Use Java for client-side Javascript• Can send complex Java objects to client from server• Scalable since state is on server• Rich widget library• Simple for AJAX
• Con• SEO unfriendly• Difficult to test• Data security problems (client-side state)
Tuesday, October 18, 11
GWT• Pro
• Use Java for client-side Javascript• Can send complex Java objects to client from server• Scalable since state is on server• Rich widget library• Simple for AJAX
• Con• SEO unfriendly• Difficult to test• Data security problems (client-side state)• GWT compiler is slow
Tuesday, October 18, 11
GWT• Pro
• Use Java for client-side Javascript• Can send complex Java objects to client from server• Scalable since state is on server• Rich widget library• Simple for AJAX
• Con• SEO unfriendly• Difficult to test• Data security problems (client-side state)• GWT compiler is slow• Front-end design in Java
Tuesday, October 18, 11
GWT• Pro
• Use Java for client-side Javascript• Can send complex Java objects to client from server• Scalable since state is on server• Rich widget library• Simple for AJAX
• Con• SEO unfriendly• Difficult to test• Data security problems (client-side state)• GWT compiler is slow• Front-end design in Java• Maven support is flaky
Tuesday, October 18, 11
GWT• Pro
• Use Java for client-side Javascript• Can send complex Java objects to client from server• Scalable since state is on server• Rich widget library• Simple for AJAX
• Con• SEO unfriendly• Difficult to test• Data security problems (client-side state)• GWT compiler is slow• Front-end design in Java• Maven support is flaky• Not easily bookmarkable
Tuesday, October 18, 11
JSF
Tuesday, October 18, 11
JSF• Pro
Tuesday, October 18, 11
JSF• Pro
• Commercial support
Tuesday, October 18, 11
JSF• Pro
• Commercial support• Sun standard
Tuesday, October 18, 11
JSF• Pro
• Commercial support• Sun standard• Advanced tooling
Tuesday, October 18, 11
JSF• Pro
• Commercial support• Sun standard• Advanced tooling• Rich widget / component library
Tuesday, October 18, 11
JSF• Pro
• Commercial support• Sun standard• Advanced tooling• Rich widget / component library
• Con
Tuesday, October 18, 11
JSF• Pro
• Commercial support• Sun standard• Advanced tooling• Rich widget / component library
• Con• Sun standard
Tuesday, October 18, 11
JSF• Pro
• Commercial support• Sun standard• Advanced tooling• Rich widget / component library
• Con• Sun standard• JSP tag soup
Tuesday, October 18, 11
JSF• Pro
• Commercial support• Sun standard• Advanced tooling• Rich widget / component library
• Con• Sun standard• JSP tag soup• Library jarhell
Tuesday, October 18, 11
JSF• Pro
• Commercial support• Sun standard• Advanced tooling• Rich widget / component library
• Con• Sun standard• JSP tag soup• Library jarhell• Painful without Facelets
Tuesday, October 18, 11
JSF• Pro
• Commercial support• Sun standard• Advanced tooling• Rich widget / component library
• Con• Sun standard• JSP tag soup• Library jarhell• Painful without Facelets• Multiple implementations to choose from
Tuesday, October 18, 11
Wicket
Tuesday, October 18, 11
Wicket• Pro
Tuesday, October 18, 11
Wicket• Pro
• True separation of layout and code
Tuesday, October 18, 11
Wicket• Pro
• True separation of layout and code• Component based (true reusability)
Tuesday, October 18, 11
Wicket• Pro
• True separation of layout and code• Component based (true reusability)• Simple AJAX support with existing components
Tuesday, October 18, 11
Wicket• Pro
• True separation of layout and code• Component based (true reusability)• Simple AJAX support with existing components• Rich community support mailing list and widget library
Tuesday, October 18, 11
Wicket• Pro
• True separation of layout and code• Component based (true reusability)• Simple AJAX support with existing components• Rich community support mailing list and widget library• Just Java and Just HTML
Tuesday, October 18, 11
Wicket• Pro
• True separation of layout and code• Component based (true reusability)• Simple AJAX support with existing components• Rich community support mailing list and widget library• Just Java and Just HTML• Easy to refactor and debug
Tuesday, October 18, 11
Wicket• Pro
• True separation of layout and code• Component based (true reusability)• Simple AJAX support with existing components• Rich community support mailing list and widget library• Just Java and Just HTML• Easy to refactor and debug• Object oriented by design
Tuesday, October 18, 11
Wicket• Pro
• True separation of layout and code• Component based (true reusability)• Simple AJAX support with existing components• Rich community support mailing list and widget library• Just Java and Just HTML• Easy to refactor and debug• Object oriented by design
• Con
Tuesday, October 18, 11
Wicket• Pro
• True separation of layout and code• Component based (true reusability)• Simple AJAX support with existing components• Rich community support mailing list and widget library• Just Java and Just HTML• Easy to refactor and debug• Object oriented by design
• Con• Documentation and examples
Tuesday, October 18, 11
Wicket• Pro
• True separation of layout and code• Component based (true reusability)• Simple AJAX support with existing components• Rich community support mailing list and widget library• Just Java and Just HTML• Easy to refactor and debug• Object oriented by design
• Con• Documentation and examples• More initial Java code
Tuesday, October 18, 11
Wicket• Pro
• True separation of layout and code• Component based (true reusability)• Simple AJAX support with existing components• Rich community support mailing list and widget library• Just Java and Just HTML• Easy to refactor and debug• Object oriented by design
• Con• Documentation and examples• More initial Java code • AJAX support requires server round-trip
Tuesday, October 18, 11
Wicket• Pro
• True separation of layout and code• Component based (true reusability)• Simple AJAX support with existing components• Rich community support mailing list and widget library• Just Java and Just HTML• Easy to refactor and debug• Object oriented by design
• Con• Documentation and examples• More initial Java code • AJAX support requires server round-trip• Wicket internals difficult to grok
Tuesday, October 18, 11
Wicket• Pro
• True separation of layout and code• Component based (true reusability)• Simple AJAX support with existing components• Rich community support mailing list and widget library• Just Java and Just HTML• Easy to refactor and debug• Object oriented by design
• Con• Documentation and examples• More initial Java code • AJAX support requires server round-trip• Wicket internals difficult to grok• Object oriented by design
Tuesday, October 18, 11
Tuesday, October 18, 11
Wicket: HTML and Java
Tuesday, October 18, 11
Wicket: HTML and Java
Typical MVC: JSP, HTML, taglibs, Java, and XML
Tuesday, October 18, 11
More websites for Wicket knowledge
RESOURCES
Tuesday, October 18, 11
By Andrew Lombardi
ABOUT APACHE WICKET
ww
w.d
zone
.co
m
G
et M
ore
Ref
card
z! V
isit
ref
card
z.co
m
#61
Getting Started with Apache Wicket
Apache Wicket is a Java-based web application framework that has rapidly grown to be a favorite among many developers. It features a POJO data model, no XML, and a proper mark-up / logic separation not seen in most frameworks. Apache Wicket gives you a simple framework for creating powerful, reusable components and offers an object oriented methodology to web development while requiring only Java and HTML.
Hot Tip
Depending on your configuration needs, you can set this parameter in the web.xml as either: a context-param or init-param to the filter a command line parameter wicket.configuration by overriding Application.getConfigurationType()
PROJECT LAYOUT
The project layout most typical of Apache Wicket applications is based on the default Maven directories. Any Wicket component that requires view markup in the form of HTML needs to be side-by-side with the Java file. Using Maven however, we can separate the source directories into java/ and resources/ to give some distinction. To get started, download either the wicket-quickstart project and modify it to your needs, or use the maven archetype here:
mvn archetype:create \-DarchetypeGroupId=org.apache.wicket \-DarchetypeArtifactId=wicket-archetype-quickstart \-DarchetypeVersion=1.3.5 \
��������������������������������������� <param-value>/refcard</param-value> </init-param> ���������������������������� � ������������������������������������������� <url-pattern>/*</url-pattern> ����������������� � </web-app>
Apache Wicket offers a development and deplyoment mode that can be configured in the web.xml file:
<context-param> ����������������� ���������������� <param-value>development</param-value> </context-param>
MODELS
Apache Wicket uses models to separate the domain layer from the view layer in your application and to bind them together. Tuesday, October 18, 11
http://www.mysticcoders.com/blog/2009/03/09/5-days-of-wicket/
Tuesday, October 18, 11
Tuesday, October 18, 11
Tuesday, October 18, 11
http://wicketbyexample.com
Tuesday, October 18, 11
http://wicketbyexample.com
Latest examples:
Tuesday, October 18, 11
http://wicketbyexample.com
•Customized Clustering options
Latest examples:
Tuesday, October 18, 11
http://wicketbyexample.com
•Customized Clustering options•Integrating HTML5 and Wicket
Latest examples:
Tuesday, October 18, 11
http://wicketbyexample.com
•Customized Clustering options•Integrating HTML5 and Wicket•Ajax-based Confirmation Modal window
Latest examples:
Tuesday, October 18, 11
Tuesday, October 18, 11
Wicket Rocks!!
Tuesday, October 18, 11
Q&AThanks for listening!
Andrew LombardiOwner, Tech EvangelistMystic Coders, LLCandrew AT mysticcoders DOT com
kinabalu @ irc://irc.freenode.net - ##wicket, ##java
Tuesday, October 18, 11
Recommended