Apache Wicket - PowerPoint PPT Presentation

About This Presentation
Title:

Apache Wicket

Description:

Apache Wicket Gerolf Seitz Future Wicket NEXT Java 5 based Generics (already in) Varargs? Typesafe PropertyModel New WicketTester Based on JDave/Hamcrest Many ... – PowerPoint PPT presentation

Number of Views:313
Avg rating:3.0/5.0
Slides: 57
Provided by: Delia61
Learn more at: http://people.apache.org
Category:

less

Transcript and Presenter's Notes

Title: Apache Wicket


1
Apache Wicket
  • Gerolf Seitz

2
Web Development withjust 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
  • QA

5
Agenda
  • What is Wicket?
  • Core Concepts
  • Developing a custom Component
  • Summary
  • QA

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!
  • lth1 wicketid"msg"gttext goes herelt/h1gt

11
Hello, World!
  • lth1 wicketid"msg"gttext goes herelt/h1gt
  • add(new Label("msg", "Hello, World!"))

12
Hello, World!
  • lth1 wicketid"msg"gttext goes herelt/h1gt
  • add(new Label("msg", "Hello, World!"))
  • lth1gtHello, World!lt/h1gt

13
Hello, World!
  • lth1 wicketid"msg"gttext goes herelt/h1gt
  • add(new Label("msg", "Hello, World!"))
  • lth1gtHello, World!lt/h1gt

14
Hello, World!
  • lth1 wicketid"msg"gttext goes herelt/h1gt
  • add(new Label("msg", "Hello, World!"))
  • lth1gtHello, World!lt/h1gt

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
  • ltdependency
  • groupId"org.apache.wicket"
  • artifactId"wicket"
  • version"1.3.3"
  • /gt

19
Getting Wicket - Quickstart
http//wicket.apache.org/quickstart.html
20
Agenda
  • What is Wicket?
  • Core Concepts
  • Developing a custom Component
  • Summary
  • QA

21
Core Concepts
  • Application
  • Session
  • RequestCycle
  • Components
  • Behaviors
  • Models

22
Application
  • Main entry point
  • Initialization
  • Configuration
  • Factories
  • Homepage
  • Configured in web.xml

23
Application
  • ltfiltergt
  • ltfilter-namegtwicketlt/servlet-namegt
  • ltfilter-classgt org.apache.wicket.protocol.http.
    WicketFilter
  • lt/filter-classgt
  • ltinit-paramgt
  • ltparam-namegtapplicationClassNamelt/param-namegt
  • ltparam-valuegtexample.MyApplicationlt/param-value
    gt
  • lt/init-paramgt
  • ltload-on-startupgt1lt/load-on-startupgt
  • lt/filtergt

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 wicketid
  • Same wicketid in markup
  • Hierarchy must match
  • lth1 wicketidmsggtgets replacedlt/h1gt
  • new Label(msg, Hello World!)

32
Component Link
  • lta href"" wicketid"link"gtClicklt/agt
  • Link link new Link("link")
  • add(link)

33
Component Link
  • lta href"" wicketid"link"gtClicklt/agt
  • Link link new Link("link")
  • _at_Override public void onClick()
  • //do something
  • setResponsePage(new NewPage())
  • add(link)

34
Component AjaxLink
  • lta wicketid"link"gtClicklt/agt
  • AjaxLink link new AjaxLink("link")
  • public void onClick(AjaxRequestTarget t)
  • //do something
  • add(link)

35
Component AjaxLink
  • lta wicketid"link"gtClicklt/agt
  • 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 components 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
  • lta href"..." onclick"return confirm('...')"gt...
    lt/agt

40
Core Concepts
  • Application
  • Session
  • RequestCycle
  • Components
  • Behaviors
  • Models

41
Models
  • Bind POJO's to Wicket components

new Label("name", model)
ltltPersongt name String city String
Model
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
  • QA

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
lthtmlgt ltheadgt lttitlegtInsert title
herelt/titlegt ltwicketheadgt ltwicketlinkgt
ltlink rel"stylesheet" type"text/css"
href"res/PasswordField.css"/gt lt/wicketlinkgt
lt/wicketheadgt lt/headgt ltbodygt ltwicketpanelgt
ltinput wicketid"password" type"password"
/gtltspan wicketid"strength"gtstrengthbarlt/spangt
lt/wicketpanelgt ltdivgt lthr/gt Examplesltbr
/gt ltinput type"password" /gt ltspan
class"weak"gtnbsplt/spangt (weak)ltbr/gt ltinput
type"password" /gt ltspan class"medium"gtnbsplt/sp
angt (medium)ltbr/gt ltinput type"password" /gt
ltspan class"strong"gtnbsplt/spangt
(strong)ltbr/gt lt/divgt lt/bodygt lt/htmlgt
47
PSI - Markup
  • ltwicketheadgt
  • ltwicketlinkgt
  • ltlink rel"stylesheet" type"text/css"
    href"res/PasswordField.css"/gt
  • lt/wicketlinkgt
  • lt/wicketheadgt
  • ltwicketpanelgt
  • ltinput wicketid"password" type"password" /gt
    ltspan wicketid"strength"gtstrengthbarlt/spangt
  • lt/wicketpanelgt

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)

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
  • QA

51
Summary
  • Component oriented web application framework
  • Just Java and HTML
  • Easy Ajax
  • Enthusiastic community

52
Community
  • http//wicket.apache.org
  • users_at_wicket.apache.org
  • wicket_at_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
  • QA

56
Thank you for yourattention
Write a Comment
User Comments (0)
About PowerShow.com