Download presentation
Presentation is loading. Please wait.
Published byGenesis Blanford Modified over 9 years ago
1
Apache Wicket Gerolf Seitz
2
Web Development with just Java and a little bit of HTML
3
Gerolf Seitz Since Sept.07 –Committer –PMC MSc student (almost finished) Software Engineer at Software Competence Center Hagenberg GmbH, Upper Austria
4
Agenda What is Wicket? Core Concepts Developing a custom Component Summary Q&A
5
Agenda What is Wicket? Core Concepts Developing a custom Component Summary Q&A
6
Wicket in a Nutshell Open Source Component oriented Web application framework Java + HTML
7
Features Everything in Java State management Safe URLs Nice URLs (mounting) OOTB support for –Clustering –Portlet
8
Features Reusable components Nested forms No more double submit of forms Back-button-support I18n WicketTester
9
Features Ajax "without" JavaScript Header Contributions –JavaScript & CSS Component level security
10
Hello, World! [text goes here]
11
Hello, World! [text goes here] + add(new Label("msg", "Hello, World!"));
12
Hello, World! [text goes here] + add(new Label("msg", "Hello, World!")); = Hello, World!
13
[text goes here] + add(new Label("msg", "Hello, World!")); = Hello, World!
14
[text goes here] + add(new Label("msg", "Hello, World!")); = Hello, World!
15
Brief History 2004: The First Encounter 2005: JavaOne'05 Smackdown 2006: Incubation at ASF
16
Brief History 2007: Graduation 2007: 1.3 released 2007: WUGs start spawning Amsterdam meetup: 80 attendees
17
Projects core extensions ioc (spring, guice) date/time velocity jmx
18
Getting Wicket Current Release: 1.3.3 <dependency groupId="org.apache.wicket" artifactId="wicket" version="1.3.3" />
19
Getting Wicket - Quickstart http://wicket.apache.org/quickstart.html
20
Agenda What is Wicket? Core Concepts Developing a custom Component Summary Q&A
21
Core Concepts Application Session RequestCycle Components Behaviors Models
22
Application Main entry point Initialization Configuration Factories Homepage Configured in web.xml
23
Application wicket org.apache.wicket.protocol.http.WicketFilter applicationClassName example.MyApplication 1
24
Core Concepts Application Session RequestCycle Components Behaviors Models
25
Session Abstraction of a user session Stores session specific data Strongly typed session attributes
26
Core Concepts Application Session RequestCycle Components Behaviors Models
27
RequestCycle Stateful –Tied to specific user session –Not (typically) bookmarkable Stateless –Not necessarily tied to specific user session –Bookmarkable
28
Core Concepts Application Session RequestCycle Components Behaviors Models
29
Components Basic building blocks Encapsulate the programmatic manipulation of markup Render content Receive events –onClick, onSubmit
30
Components – lots of `em Label, MultiLineLabel, TextField, PasswordTextField, Image, Link, AjaxLink, AjaxFallbackLink, Button, AjaxButton, DatePicker, ListView, RefreshingView, DataGrid, DataTable, Tree, GMap, Wizard, JasperReports,...
31
Components Component has wicket:id Same wicket:id in markup Hierarchy must match [gets replaced] new Label(„msg“, „Hello World!“);
32
Component: Link Click Link link = new Link("link"); add(link);
33
Component: Link Click Link link = new Link("link") { @Override public void onClick() { //do something setResponsePage(new NewPage()); } }; add(link);
34
Component: AjaxLink Click AjaxLink link = new AjaxLink("link") { public void onClick(AjaxRequestTarget t){ //do something } }; add(link);
35
Component: AjaxLink Click someComponent.setOutputMarkupId(true); AjaxLink link = new AjaxLink("link") { public void onClick(AjaxRequestTarget t){ //do something t.addComponent(someComponent); t.appendJavascript("Effects.fade('foo');"); } }; add(link);
36
Components Components with own markup –Page, Panel, Border Java and markup files in same package on classpath
37
Core Concepts Application Session RequestCycle Components Behaviors Models
38
Behaviors Plugins for components Change attributes of your component‘s markup Add Javascript events Add Ajax behavior timeLabel.add( new AjaxSelfUpdatingTimerBehavior( Duration.seconds(5)));
39
Behaviors link.add(new AbstractBehavior() { public void onComponentTag(Component component, ComponentTag tag) { tag.put("onclick", "return confirm('Are you sure?');"); } }); Output:...
40
Core Concepts Application Session RequestCycle Components Behaviors Models
41
Bind POJO's to Wicket components new Label("name", model) Model +name: String +city: String
42
Models Lazy binding in Java sucks –Doesn't update: new Label("name", person.getName()); –Null checks necessary new Label("street", person.getAddress().getStreet()); Solution: OGNL/EL like expressions
43
Models PropertyModel: –new PropertyModel(person, “name”) –new PropertyModel(person, “address.street”) CompoundPropertyModel –setModel(new CompoundPropertyModel(p)); –add(new Label("name")); –add(new Label("address.street"));
44
Agenda What is Wicket? Core Concepts Developing a custom Component Summary Q&A
45
Custom Components 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. »
46
PasswordStrenghIndicator Insert title here [strengthbar] Examples: (weak) (medium) (strong)
47
PSI - Markup [strengthbar]
48
PSI - Java public class PasswordField extends Panel { public final static String WEAK = "weak"; public final static String MEDIUM = "medium"; public final static String STRONG = "strong"; public PasswordField(String id, IModel model) { super(id, model); PasswordTextField passwordTextField = new PasswordTextField("password", model); add(passwordTextField); final Label strength = new Label("strength", ""); add(strength); strength.add(new AttributeModifier("class", true, new Model() { public Object getObject() { return getPasswordStrength(PasswordField.this.getModelObjectAsString()); } })); strength.setOutputMarkupId(true); passwordTextField.add(new OnKeyPausedAjaxBehavior() { protected void onUpdate(AjaxRequestTarget target) { target.addComponent(strength); } }); }}
49
PSI - TestPage public class TestPage extends WebPage { private String password; public TestPage() { Form form = new Form("form"); form.add(new PasswordField("password", new PropertyModel(this, "password"))); add(form); }
50
Agenda What is Wicket? Core Concepts Developing a custom Component Summary Q&A
51
Summary Component oriented web application framework Just Java and HTML Easy Ajax Enthusiastic community
52
Community http://wicket.apache.org users@wicket.apache.org ##wicket@irc.freenode.net
53
Future – Wicket NEXT Java 5 based –Generics (already in) –Varargs? –Typesafe PropertyModel New WicketTester –Based on JDave/Hamcrest Many more cool features
54
Books
55
Agenda What is Wicket? Core Concepts Developing a custom Component Q&A
56
Thank you for your attention
Similar presentations
© 2025 SlidePlayer.com. Inc.
All rights reserved.