An in depth look at Apache Wicket - Amazon Web...

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

•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