Presentation is loading. Please wait.

Presentation is loading. Please wait.

Apache Wicket Gerolf Seitz. Web Development with just Java and a little bit of HTML.

Similar presentations


Presentation on theme: "Apache Wicket Gerolf Seitz. Web Development with just Java and a little bit of HTML."— Presentation transcript:

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


Download ppt "Apache Wicket Gerolf Seitz. Web Development with just Java and a little bit of HTML."

Similar presentations


Ads by Google