Top Banner
Apache Wicket: web applications with just Java Xavier Hanin JavaZone ‘07
47

Apache Wicket: web applications with just Java Xavier Hanin JavaZone ‘07.

Dec 22, 2015

Download

Documents

Hugo Carter
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: Apache Wicket: web applications with just Java Xavier Hanin JavaZone ‘07.

Apache Wicket: web applications with just Java

Xavier HaninJavaZone ‘07

Page 2: Apache Wicket: web applications with just Java Xavier Hanin JavaZone ‘07.

Who is Xavier Hanin

• Independent Java Consultant

• Customers

• Open Source

Renault

Page 3: Apache Wicket: web applications with just Java Xavier Hanin JavaZone ‘07.

Agenda

• What is Wicket

• Core concepts of Wicket

• Developing a custom component

• Q&A

Page 4: Apache Wicket: web applications with just Java Xavier Hanin JavaZone ‘07.

Wicket in a Nutshell

• Open Source (Apache Software Foundation)• Component based • Pure Java + Pure HTML• Simple• Enthusiastic community

Page 5: Apache Wicket: web applications with just Java Xavier Hanin JavaZone ‘07.

What is Wicket?

• The technology: enabling component-oriented, programmatic manipulation of markup

• The mission: bringing object oriented programming to the web application view layer

• The reward: have a fun job and be good friends with your manager again

Page 6: Apache Wicket: web applications with just Java Xavier Hanin JavaZone ‘07.

Achieving these goals through

• Keeping simple things simple• Utilizing an object-oriented component model

where components are truly self contained• Re-applying the Model View Controller pattern

on components instead of requests, with models as first class citizens

• Having a clean separation of concerns between HTML and Java

Page 7: Apache Wicket: web applications with just Java Xavier Hanin JavaZone ‘07.

Achieving these goals through

• Providing transparent, fully automated state management

• Keeping configuration needs to the minimum

• No more XML!

• Making using & creating custom components easier than any framework out there

Page 8: Apache Wicket: web applications with just Java Xavier Hanin JavaZone ‘07.

Component versus ‘traditional’

• Traditional– Struts, WebWork, Spring MVC, etc.– Proven for web– A lot of web developers available

• Components– JSF, Wicket, Tapestry, etc.– Traditional model for UI development on thick

clients– A lot of developers available

Page 9: Apache Wicket: web applications with just Java Xavier Hanin JavaZone ‘07.

Features

• Page composition– panels, borders and markup inheritance

• Excellent localization and style support– template and resource loading

(_be.html, .xml)– localized models (e.g. for labels)– sophisticated resource bundle lookup

(composition & inheritance hierarchy)– automatic client capabilities detection

Page 10: Apache Wicket: web applications with just Java Xavier Hanin JavaZone ‘07.

Features

• Integration– Spring– Guice– Hibernate– JasperReports– OSGi

• Fancy components– sortable, filterable, pageable, data aware tables– date picker, rich text editor, Google Maps– tabbed panel, navigation, tree, wizard

Page 11: Apache Wicket: web applications with just Java Xavier Hanin JavaZone ‘07.

Features

• State management– type safe sessions

• clustering support• back button support• Double submit strategies

– render redirect/ redirect to buffered response/ none

• Testing support– JUnit testing

• extensive logging and error reporting

Page 12: Apache Wicket: web applications with just Java Xavier Hanin JavaZone ‘07.

Features

• Ajax support and components– Ajax without writing JavaScript, Dojo,

Scriptaculous, ...

• Header contribution– Javascript & CSS

• URL mounting– pretty URLs

• Component level security

Page 13: Apache Wicket: web applications with just Java Xavier Hanin JavaZone ‘07.

Agenda

• What is Wicket

• Core concepts of Wicket

• Developing a custom component

• Q&A

Page 14: Apache Wicket: web applications with just Java Xavier Hanin JavaZone ‘07.

Wicket’s concepts

• Application

• Session

• RequestCycle

• Components

• Behaviors

• Models

Page 15: Apache Wicket: web applications with just Java Xavier Hanin JavaZone ‘07.

Application

• Main entry point for your web application

• Configuration– Output Wicket specific tags?

– Watch for markup changes every …?

– Defines homepage

• Factories for– Session

– RequestCycle

– Security

– …

Page 16: Apache Wicket: web applications with just Java Xavier Hanin JavaZone ‘07.

Application

• Configured in web.xml:

<filter> <filter-name>wicket</servlet-name> <filter-class> org.apache.wicket.protocol.http.WicketFilter </filter-class> <init-param> <param-name>applicationClassName</param-name> <param-value>example.MyApplication</param-value> </init-param> <load-on-startup>1</load-on-startup></filter>

Page 17: Apache Wicket: web applications with just Java Xavier Hanin JavaZone ‘07.

Wicket’s concepts

• Application

• Session

• RequestCycle

• Components

• Behaviors

• Models

Page 18: Apache Wicket: web applications with just Java Xavier Hanin JavaZone ‘07.

Session

• Abstraction of a user session

• Storage typically in HttpSession

• Stores session specific data– Locale, Client info (browser vendor and

version)– Your own data?

• Logged in user• Shopping cart contents

– Limited page history for back button support

Page 19: Apache Wicket: web applications with just Java Xavier Hanin JavaZone ‘07.

Session

class MySession extends WebSession {

private ShoppingCart cart;

public ShoppingCart getCart() { … }

public void setCart(ShoppingCart cart) { … }

}

mysession.setCart(new ShoppingCart());

ShoppingCart cart = mysession.getCart();

cart.add(quantity, selectedProduct);

Page 20: Apache Wicket: web applications with just Java Xavier Hanin JavaZone ‘07.

Wicket’s concepts

• Application

• Session

• RequestCycle

• Components

• Behaviors

• Models

Page 21: Apache Wicket: web applications with just Java Xavier Hanin JavaZone ‘07.

RequestCycle

• Steps in a request cycle:1.Create request cycle object

2.Decode the request

3.Identify request target (page, component, …)

4.Process event (onClick, onSubmit, …)

5.Respond (page, component, image, pdf, …)

6.Clean up

Page 22: Apache Wicket: web applications with just Java Xavier Hanin JavaZone ‘07.

RequestCycle

• Two types of requests:– Stateful

• Tied to specific user session• Not bookmarkable

– Stateless• Not necessarily tied to specific user session• Bookmarkable

Page 23: Apache Wicket: web applications with just Java Xavier Hanin JavaZone ‘07.

Wicket’s concepts

• Application

• Session

• RequestCycle

• Components

• Behaviors

• Models

Page 24: Apache Wicket: web applications with just Java Xavier Hanin JavaZone ‘07.

Components

• encapsulate the programmatic manipulation of markup

• can receive an event– onClick, onSubmit

• know how and where to render itself

Page 25: Apache Wicket: web applications with just Java Xavier Hanin JavaZone ‘07.

Component

• Ultimate super class wicket.Component– Label– MultiLineLabel– TextField– PasswordTextField– Image– Link– Tree– BookmarkablePageLink– JasperReports

– ListView– Loop– PagingNavigator– ImageMap– Button– Ajax…– Sorting, paging repeaters– Wizard– DatePicker

Page 26: Apache Wicket: web applications with just Java Xavier Hanin JavaZone ‘07.

Components and markup

• A component is identified in markup with wicket:id

Html: <h1 wicket:id=“msg”>Gets replaced</h1>

Java:new Label(“msg”, “Hello, World!”);

Final (wicket tags can be stripped):

<h1>Hello, World!</h1>

Page 27: Apache Wicket: web applications with just Java Xavier Hanin JavaZone ‘07.

Components and markup

• Component can have its own markup file– Page– Panel– Border

• Put java, markup and supporting files in same package on class path

Page 28: Apache Wicket: web applications with just Java Xavier Hanin JavaZone ‘07.

A page: Hello, World!

Page 29: Apache Wicket: web applications with just Java Xavier Hanin JavaZone ‘07.

Wicket’s concepts

• Application

• Session

• RequestCycle

• Components

• Behaviors

• Models

Page 30: Apache Wicket: web applications with just Java Xavier Hanin JavaZone ‘07.

Behaviors

• Behaviors are plug-ins for Components

• They can modify the components markup

item.add(new AbstractBehavior() {public void onComponentTag(

Component component, ComponentTag tag) {String css = (((Item)component).getIndex() % 2

== 0) ? "even" : "odd";

tag.put("class", css);}

});

Output:<tr class=“odd”>…</tr><tr class=“even”>…</tr>

Page 31: Apache Wicket: web applications with just Java Xavier Hanin JavaZone ‘07.

Behaviors

• Change attributes of your component’s markup• Add javascript events• Add Ajax behavior

component.add( new AjaxSelfUpdatingBehavior( Duration.seconds(1)));

Page 32: Apache Wicket: web applications with just Java Xavier Hanin JavaZone ‘07.

Wicket’s concepts

• Application

• Session

• RequestCycle

• Components

• Behaviors

• Models

Page 33: Apache Wicket: web applications with just Java Xavier Hanin JavaZone ‘07.

Models

• Models bind your POJO’s to Wicket components

Label(“name”, model)

<<Person>>

+name : String+city : String

PropertyModel

Page 34: Apache Wicket: web applications with just Java Xavier Hanin JavaZone ‘07.

Models

• Lazy binding in Java sucks– Doesn’t update:

new TextField(“txt”, person.getName())

– Gives null pointers:new Label(“street”, person.getAddress().getStreet())

• Solution: OGNL/EL like expressions

Page 35: Apache Wicket: web applications with just Java Xavier Hanin JavaZone ‘07.

Models

• PropertyModel:– new PropertyModel(person, “name”)– new PropertyModel(person, “address.street”)

• Be aware for nulls when using updates:Person p = new Person();

new TextField(“street”, new PropertyModel(p, “address.street”));

Page 36: Apache Wicket: web applications with just Java Xavier Hanin JavaZone ‘07.

Agenda

• What is Wicket

• Core concepts of Wicket

• Developing a custom component

• Q&A

Page 37: Apache Wicket: web applications with just Java Xavier Hanin JavaZone ‘07.

Why a custom component?

• Eelco Hillenius: « Imagine being told that you can use Java as your

programming language, but at the same time being told not to create your own classes. [...]

I fail to understand why that has to be different for UI development, and Wicket proves it doesn't have to be so. »

Page 38: Apache Wicket: web applications with just Java Xavier Hanin JavaZone ‘07.

Custom components for all

464 pages

20 minutes

Page 39: Apache Wicket: web applications with just Java Xavier Hanin JavaZone ‘07.

Example: Password strength

weak

medium

strong

Page 40: Apache Wicket: web applications with just Java Xavier Hanin JavaZone ‘07.

Components

• Creating custom component is as easy as typing in ‘extends’

• Extends wicket.Component down the line

• Available on application classpath

Page 41: Apache Wicket: web applications with just Java Xavier Hanin JavaZone ‘07.

Example: Password strength

• Panels provide grouping– Have own markup file– Can be exchanged in pages for other components– Can contribute to header– Can contain any number of components, including panels

Page 42: Apache Wicket: web applications with just Java Xavier Hanin JavaZone ‘07.

Example: Password strength

Page 43: Apache Wicket: web applications with just Java Xavier Hanin JavaZone ‘07.

Example: Password strength

Page 44: Apache Wicket: web applications with just Java Xavier Hanin JavaZone ‘07.

Example: Password strength

Page 45: Apache Wicket: web applications with just Java Xavier Hanin JavaZone ‘07.

Components are reusable

• Put them in a JAR

• Package all necessary resources:– HTML, JavaScript, Images, CSS– class file

• Put JAR on classpath

• Ready for (re)use

Page 46: Apache Wicket: web applications with just Java Xavier Hanin JavaZone ‘07.

Conclusion

• Smart component oriented web framework

• Easy creation and use of custom components

• Enthustiatic community

Join in!http://wicket.apache.org/

[email protected]

Page 47: Apache Wicket: web applications with just Java Xavier Hanin JavaZone ‘07.

Agenda

• What is Wicket

• Core concepts of Wicket

• Developing a custom component

• Q&A