Apache Wicket 
                            Deliver your web 
                           application on time
              ...
Agenda

         Overview

         The Wicket Way (Concepts)

         Features

         Demo
                A wic...
From Roi’s JSF presentation:

          JSF 1.2 (JSR 252):
            Shortcomings 
                    Development
   ...
Overview
        • Component based Java web framework
               • rich component suite
        • Open source (Apache ...
A little bit of history


                                                         1.2
          0.9                 1.0  ...
Good Documentation




        Wicket wiki:
               http://cwiki.apache.org/WICKET/


        Wicket Examples (Live...
From Roi’s JSF presentation:
         JSF 2.0 (JSR 314):
         Purpose
                    Max. development productivi...
Agenda

         Overview

         The Wicket Way (Concepts)

         Features

         Demo
                A wic...
Wicket Templates

        • HTML Templates contains 
               • static presentation code (markup)
               • w...
Templates
                          <table> 
    JSP:                     <tr> 
                              <c:forEach v...
Wicket Templates

        • Most existing frameworks require special 
          HTML code.
        • fully compliant with ...
If you know Java and HTML you already know a 
                       lot about Wicket!!




                              ...
Linking Java and HTML

        public class HelloWorld extends WebPage { 
         
            public HelloWorld() { 
   ...
Linking Java and HTML

               HTML and Java files resides in the same 
                classpath package




     ...
Object Oriented

           • Object Oriented
               • Great for Java developers 
               • Everything is d...
Application Class
      public class DemoApplication extends WebApplication { 
       
          @Override public Class ge...
Application Class

        • The only xml configuration is the web.xml configuration!



    <filter> 
        <filter­nam...
From Roi’s JSF presentation:

          JSF 1.2 (JSR 252):
            Shortcomings 
                    Development
   ...
Customizing Components

            • Object Oriented Basics – how to extend:
                   • By Inheritance
        ...
Customizing Components

     Component Hook Methods
public class MyComponent extends Component { 
 
    protected void onA...
Customizing Components

            • Object Oriented Basics – how to extend:
                   • By Inheritance
        ...
Customizing Components

    public class SimpleAttributeModifier extends AbstractBehavior { 
        /** 
         * Calle...
Customizing Components

        SimpleAttributeModifer
    TextField myText = new TextField(quot;myTextquot;, new Model(qu...
Customizing Components

  item.add(new AbstractBehavior() { 
    /** 
     * Called any time a component that has this beh...
Customizing Components

              • Behaviors are used for:
                             • Modifying attributes
      ...
Agenda

         Overview

         The Wicket Way (Concepts)

         Features

         Demo
                A wic...
From Roi’s JSF presentation:

          JSF 1.2 (JSR 252):
            Shortcomings 
                    Development
   ...
Editable table




                                                        30
Copyright AlphaCSP Israel 2007 ­ The JavaEdg...
Table




                                                        31
Copyright AlphaCSP Israel 2007 ­ The JavaEdge Seminar
Editable Tree Table




                                                        32
Copyright AlphaCSP Israel 2007 ­ The Ja...
DatePicker




                                                        33
Copyright AlphaCSP Israel 2007 ­ The JavaEdge Se...
Captcha




                                                        34
Copyright AlphaCSP Israel 2007 ­ The JavaEdge Seminar
Modal Window




                                                        35
Copyright AlphaCSP Israel 2007 ­ The JavaEdge ...
File Upload




                                                        36
Copyright AlphaCSP Israel 2007 ­ The JavaEdge S...
Tabbed Panel



   <span wicket:id=quot;tabsquot;  
      class=quot;tabpanelquot;>[tabbed panel]</span> 
                ...
Auto Complete Component




                                                        38
Copyright AlphaCSP Israel 2007 ­ Th...
Models

     • Holds the values of the components
     • Mediate between the view and domain 
       layer



            ...
Models
      public class HelloWorld extends WebPage { 
       
          public HelloWorld() { 
              add(new Lab...
Models

 public class HelloWorld extends WebPage { 
  
     public HelloWorld() { 
         add(new TextField(quot;namequo...
Models

    personForm.add(new TextField(quot;personNamequot;, new IModel() { 
                public Object getObject() {...
Models

     new TextField(quot;personNamequot;, new PropertyModel(person, quot;namequot;)); 

                           ...
Models

   Model                                                Description
   Model                                      ...
From Roi’s JSF presentation:

          JSF 1.2 (JSR 252):
            Shortcomings 
                    Development
   ...
descriptive exceptions!




                                                        46
Copyright AlphaCSP Israel 2007 ­ Th...
More Features

        • Ajax Debug Window
               – Shows the ajax request and response
               – Shows exc...
Sessions

        • Strongly Typed Sessions

    public class MySession extends WebSession { 
       private String myAttr...
Localization

             String Resource Search Order:
   •
                         Component
                  •
     ...
Agenda

         Overview

         The Wicket Way (Concepts)

         Features

         Demo
                A wic...
Q&A
                                                        51
Copyright AlphaCSP Israel 2007 ­ The JavaEdge Seminar
Wicket Deliver Your Webapp On Time
Wicket Deliver Your Webapp On Time
Upcoming SlideShare
Loading in …5
×

Wicket Deliver Your Webapp On Time

4,444
-1

Published on

Published in: Business, Technology
0 Comments
3 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
4,444
On Slideshare
0
From Embeds
0
Number of Embeds
1
Actions
Shares
0
Downloads
177
Comments
0
Likes
3
Embeds 0
No embeds

No notes for slide

Wicket Deliver Your Webapp On Time

  1. 1. Apache Wicket  Deliver your web  application on time Yoav Hakman Development Manager  & Consultant, AlphaCSP 2 Copyright AlphaCSP Israel 2007 ­ The JavaEdge Seminar
  2. 2. Agenda  Overview  The Wicket Way (Concepts)  Features  Demo  A wicket application  A custom component  Q & A 3 Copyright AlphaCSP Israel 2007 ­ The JavaEdge Seminar
  3. 3. From Roi’s JSF presentation: JSF 1.2 (JSR 252):  Shortcomings   Development  Customizing components is complicated  Exceptions are not descriptive  No support for annotations  Deployment  Unnecessary deployment step  Not JEE compliant (packaging, DI)  Components  Missing components  Limited component functionality (DataGrid)  Security  No security model (managed beans, resources)  Ajax 4 Copyright AlphaCSP Israel 2007 ­ The JavaEdge Seminar
  4. 4. Overview • Component based Java web framework • rich component suite • Open source (Apache 2 Licensed) • Wicket makes developing web­apps simple and  enjoyable again Flat learning curve • No XML configuration files • Very easy to create and reuse components! • Pure Object Oriented! • 5 Copyright AlphaCSP Israel 2007 ­ The JavaEdge Seminar
  5. 5. A little bit of history 1.2 0.9 1.0 1.1 1.3 10/2004 10/2005 07/2007 06/2005 05/2006 11/2007 6 Copyright AlphaCSP Israel 2007 ­ The JavaEdge Seminar
  6. 6. Good Documentation Wicket wiki: http://cwiki.apache.org/WICKET/ Wicket Examples (Live Demo + sources): http://www.wicketstuff.org/wicket13/ 7 Copyright AlphaCSP Israel 2007 ­ The JavaEdge Seminar
  7. 7. From Roi’s JSF presentation: JSF 2.0 (JSR 314):  Purpose Max. development productivity (IDE)  Min. maintenance complexity  Integrate with other web tech.  More responsive UI (Ajax)   Requirements Ease of development  New Features & Fixes  Performance & Scalability  Technology Adoption  8 Copyright AlphaCSP Israel 2007 ­ The JavaEdge Seminar
  8. 8. Agenda  Overview  The Wicket Way (Concepts)  Features  Demo  A wicket application  A custom component  Q & A 9 Copyright AlphaCSP Israel 2007 ­ The JavaEdge Seminar
  9. 9. Wicket Templates • HTML Templates contains  • static presentation code (markup) • wicket:id  attribute­ placeholder for wicket  components • Forces the developer to keep “clean templates” • The html designer has no knowledge regarding  the business domain objects • vs jsf backing bean 10 Copyright AlphaCSP Israel 2007 ­ The JavaEdge Seminar
  10. 10. Templates <table>  JSP:    <tr>      <c:forEach var=quot;itemquot; items=quot;${sessionScope.list}quot;>        <td>          <c:out value=quot;item.namequot; />        </td>      </c:forEach>    </tr>  </table>  <h:dataTable value=quot;#{list}quot; var=quot;itemquot;>  JSF:     <h:column>          <h:outputText value=quot;#{item.name}quot;/>      </h:column>  </h:dataTable>    <table>    <tr>  WICKET:     <td wicket:id=”list”>         <span wicket:id=”name”>power point</span>      </td>    </tr>  </table>    11 Copyright AlphaCSP Israel 2007 ­ The JavaEdge Seminar
  11. 11. Wicket Templates • Most existing frameworks require special  HTML code. • fully compliant with the XHTML standard,  so you can use: • Macromedia Dreamweaver • Microsoft Front Page • Any other HTML editor 12 Copyright AlphaCSP Israel 2007 ­ The JavaEdge Seminar
  12. 12. If you know Java and HTML you already know a  lot about Wicket!! 13 Copyright AlphaCSP Israel 2007 ­ The JavaEdge Seminar
  13. 13. Linking Java and HTML public class HelloWorld extends WebPage {        public HelloWorld() {          add(new Label(quot;messagequot;, quot;Hello World!quot;));      }  }  Identifier Model <html>  <body>      <span wicket:id=quot;messagequot; id=quot;messagequot;>to be replaced</span>  </body>  </html>    14 Copyright AlphaCSP Israel 2007 ­ The JavaEdge Seminar
  14. 14. Linking Java and HTML HTML and Java files resides in the same  classpath package 15 Copyright AlphaCSP Israel 2007 ­ The JavaEdge Seminar
  15. 15. Object Oriented • Object Oriented • Great for Java developers  • Everything is done in Java • Swing like programming … Form form = new Form(quot;customerformquot;,                         new CompoundPropertyModel(new Customer()));  TextField zipCodeComponent = new TextField(quot;zipquot;);  zipCodeComponent.add(new ZipCodeValidator());  form.add(zipCodeComponent);    16 Copyright AlphaCSP Israel 2007 ­ The JavaEdge Seminar
  16. 16. Application Class public class DemoApplication extends WebApplication {        @Override public Class getHomePage() {          return HomePage.class;      }        @Override protected void init() {          getMarkupSettings().setCompressWhitespace(false);      }    • Settings Application Settings – Debug Settings – Exception Settings – Markup Settings – Page Settings – RequestCycle Settings – Security Settings – Session Settings – 18 Copyright AlphaCSP Israel 2007 ­ The JavaEdge Seminar
  17. 17. Application Class • The only xml configuration is the web.xml configuration! <filter>      <filter­name>DemoApplication</filter­name>      <filter­class>org.apache.wicket.protocol.http.WicketFilter</filter­      <init­param>          <param­name>applicationClassName</param­name>          <param­value>com.alphacsp.DemoApplication</param­value>      </init­param>      <init­param>          <param­name>configuration</param­name>          <param­value>development</param­value>          <!­­ <param­value>deployment</param­value> ­­>      </init­param>  </filter>    19 Copyright AlphaCSP Israel 2007 ­ The JavaEdge Seminar
  18. 18. From Roi’s JSF presentation: JSF 1.2 (JSR 252):  Shortcomings   Development  Customizing components is complicated  Exceptions are not descriptive  No support for annotations  Deployment  Unnecessary deployment step  Not JEE compliant (packaging, DI)  Components  Missing components  Limited component functionality (DataGrid)  Security  No security model (managed beans, resources) 20 Copyright AlphaCSP Israel 2007 ­ The JavaEdge Seminar
  19. 19. Customizing Components • Object Oriented Basics – how to extend: • By Inheritance • By Delegation public class PasswordTextField extends TextField {        public PasswordTextField(String id) {          super(id);      }        /**       * Processes the component tag       */        protected final void onComponentTag(final ComponentTag tag) {          super.onComponentTag(tag);          tag.put(quot;valuequot;, quot;quot;);      }    }    21 Copyright AlphaCSP Israel 2007 ­ The JavaEdge Seminar
  20. 20. Customizing Components Component Hook Methods public class MyComponent extends Component {        protected void onAfterRender() {      }        protected void onBeforeRender() {      }        protected void onComponentTag(ComponentTag tag) {      }        protected void onComponentTagBody(MarkupStream markupStream, ComponentTag openTag)      }        protected void onModelChanged() {      }        protected void onRender(MarkupStream markupStream) {                }  }  22 Copyright AlphaCSP Israel 2007 ­ The JavaEdge Seminar
  21. 21. Customizing Components • Object Oriented Basics – how to extend: • By Inheritance • By Delegation 23 Copyright AlphaCSP Israel 2007 ­ The JavaEdge Seminar
  22. 22. Customizing Components public class SimpleAttributeModifier extends AbstractBehavior {      /**       * Called any time a component that has this behavior registered is        * rendering the component tag.       */      public void onComponentTag(final Component component,                                  final ComponentTag tag)    {      if (isEnabled(component))      {        tag.getAttributes().put(attribute, value);      }    }      24 Copyright AlphaCSP Israel 2007 ­ The JavaEdge Seminar
  23. 23. Customizing Components SimpleAttributeModifer TextField myText = new TextField(quot;myTextquot;, new Model(quot;fooquot;));  myText.add(new SimpleAttributeModifier(quot;classquot;, quot;greenquot;));    With the following markup:    <input type=quot;textquot; wicket:id=quot;myTextquot;/>    Would be rendered as:    <input type=”text” wicket:id=”myText” name=”myText” class=”green”         value=”foo”/>    25 Copyright AlphaCSP Israel 2007 ­ The JavaEdge Seminar
  24. 24. Customizing Components item.add(new AbstractBehavior() {    /**     * Called any time a component that has this behavior registered is      * rendering the component tag.     */    public void onComponentTag(Component component, ComponentTag tag) {      String css = (((Item) component).getIndex() % 2 == 0) ? quot;evenquot;:quot;oddquot;;      tag.put(quot;classquot;, css);    }  });    Output: <tr class=“odd”>…</tr>  <tr class=“even”>…</tr>    26 Copyright AlphaCSP Israel 2007 ­ The JavaEdge Seminar
  25. 25. Customizing Components • Behaviors are used for: • Modifying attributes • Adding Java Script events • Adding Ajax Events TextField field = new TextField(quot;textfieldquot;, inputModel);  add(field);    field.add(new AjaxFormComponentUpdatingBehavior(quot;onblurquot;) {      protected void onUpdate(AjaxRequestTarget target) {      // do something here      }  });    27 Copyright AlphaCSP Israel 2007 ­ The JavaEdge Seminar
  26. 26. Agenda  Overview  The Wicket Way (Concepts)  Features  Demo  A wicket application  A custom component  Q & A 28 Copyright AlphaCSP Israel 2007 ­ The JavaEdge Seminar
  27. 27. From Roi’s JSF presentation: JSF 1.2 (JSR 252):  Shortcomings   Development  Customizing components is complicated  Exceptions are not descriptive  No support for annotations  Deployment  Unnecessary deployment step  Not JEE compliant (packaging, DI)  Components  Missing components  Limited component functionality (DataGrid) Security   No security model (managed beans, resources) 29 Copyright AlphaCSP Israel 2007 ­ The JavaEdge Seminar
  28. 28. Editable table 30 Copyright AlphaCSP Israel 2007 ­ The JavaEdge Seminar
  29. 29. Table 31 Copyright AlphaCSP Israel 2007 ­ The JavaEdge Seminar
  30. 30. Editable Tree Table 32 Copyright AlphaCSP Israel 2007 ­ The JavaEdge Seminar
  31. 31. DatePicker 33 Copyright AlphaCSP Israel 2007 ­ The JavaEdge Seminar
  32. 32. Captcha 34 Copyright AlphaCSP Israel 2007 ­ The JavaEdge Seminar
  33. 33. Modal Window 35 Copyright AlphaCSP Israel 2007 ­ The JavaEdge Seminar
  34. 34. File Upload 36 Copyright AlphaCSP Israel 2007 ­ The JavaEdge Seminar
  35. 35. Tabbed Panel <span wicket:id=quot;tabsquot;      class=quot;tabpanelquot;>[tabbed panel]</span>          List<ITab> tabs = new ArrayList<ITab>();          tabs.add(new AbstractTab(new Model(quot;first tabquot;)) {              public Panel getPanel(String panelId) {                  return new TabPanel1(panelId);              }          });          tabs.add(new AbstractTab(new Model(quot;second tabquot;)) {              public Panel getPanel(String panelId) {                  return new TabPanel2(panelId);              }          });          tabs.add(new AbstractTab(new Model(quot;third tabquot;)) {              public Panel getPanel(String panelId) {                  return new TabPanel3(panelId);              }          });  37         add(new TabbedPanel(quot;tabsquot;, tabs));  Copyright AlphaCSP Israel 2007 ­ The JavaEdge Seminar
  36. 36. Auto Complete Component 38 Copyright AlphaCSP Israel 2007 ­ The JavaEdge Seminar
  37. 37. Models • Holds the values of the components • Mediate between the view and domain  layer     public interface IModel {      Object getObject();      void setObject(Object object);        }    39 Copyright AlphaCSP Israel 2007 ­ The JavaEdge Seminar
  38. 38. Models public class HelloWorld extends WebPage {        public HelloWorld() {          add(new Label(quot;messagequot;, quot;Hello World!quot;));      }  }    public class HelloWorld extends WebPage {        public HelloWorld() {          add(new Label(quot;messagequot;, new Model(quot;Hello World!quot;));      }  }      The data is constant  40 Copyright AlphaCSP Israel 2007 ­ The JavaEdge Seminar
  39. 39. Models public class HelloWorld extends WebPage {        public HelloWorld() {          add(new TextField(quot;namequot;, new Model(person.getName()));      }  }      • Immutable, not dynamic • Can produce null pointer exceptions! person.getAddress().getCity() 41 Copyright AlphaCSP Israel 2007 ­ The JavaEdge Seminar
  40. 40. Models personForm.add(new TextField(quot;personNamequot;, new IModel() {              public Object getObject() {                  return person.getName();              }                public void setObject(Serializable serializable) {                  person.setName((String) serializable);              }          }));    • Dynamic • Inconvenient! 42 Copyright AlphaCSP Israel 2007 ­ The JavaEdge Seminar
  41. 41. Models new TextField(quot;personNamequot;, new PropertyModel(person, quot;namequot;));    • The expression language is more compact  than the analogous Java code  • Simpler than to subclass a Model • No null pointer exceptions – “person.address.city” 43 Copyright AlphaCSP Israel 2007 ­ The JavaEdge Seminar
  42. 42. Models Model Description Model Wraps a serializable object PropertyModel Uses a property expression to  dynamically access a property in  your domain objects  CompoundPropertyModel Uses component identidiers as  property expressions  LoadableDetachableModel Used for large data sets ResourceModel Used for retrieving messages from  resource bundles StringResourceModel Adds property expressions and  MessageFormat substitutions  44 Copyright AlphaCSP Israel 2007 ­ The JavaEdge Seminar
  43. 43. From Roi’s JSF presentation: JSF 1.2 (JSR 252):  Shortcomings   Development  Customizing components is complicated  Exceptions are not descriptive  No support for annotations  Deployment  Unnecessary deployment step  Not JEE compliant (packaging, DI)  Components  Missing components  Limited component functionality (DataGrid)  Security  No security model (managed beans, resources) 45 Copyright AlphaCSP Israel 2007 ­ The JavaEdge Seminar
  44. 44. descriptive exceptions! 46 Copyright AlphaCSP Israel 2007 ­ The JavaEdge Seminar
  45. 45. More Features • Ajax Debug Window – Shows the ajax request and response – Shows exceptions  • Integration with other frameworks Spring • Juice • Seam 2.0 • Acegi Security • • Nice and Secure URL’s 47 Copyright AlphaCSP Israel 2007 ­ The JavaEdge Seminar
  46. 46. Sessions • Strongly Typed Sessions public class MySession extends WebSession {     private String myAttribute;     private ShoppingCart cart;     private UserDetails userDetails;       public MySession(WebApplication application) {        super(application);     }     // ... getters and setters  }    48 Copyright AlphaCSP Israel 2007 ­ The JavaEdge Seminar
  47. 47. Localization String Resource Search Order: • Component • Panel (parent) • Page  • Application • 49 Copyright AlphaCSP Israel 2007 ­ The JavaEdge Seminar
  48. 48. Agenda  Overview  The Wicket Way (Concepts)  Features  Demo  A wicket application  A custom component  Q & A 50 Copyright AlphaCSP Israel 2007 ­ The JavaEdge Seminar
  49. 49. Q&A 51 Copyright AlphaCSP Israel 2007 ­ The JavaEdge Seminar
  1. A particular slide catching your eye?

    Clipping is a handy way to collect important slides you want to go back to later.

×