JSF 2.0
                              Robert Reiz
Tuesday, February 23, 2010
Trainer


                  Robert Reiz Dipl. Inf. (FH-Mannheim)

                  Buch Mail-Travel-Agents auf Linux-Systemen

                  Java-Projekte seit 2002

                  JSF-Erfahrung seit 2006

                  Gründung der PLOIN GmbH Jan. 2008

                  Trainer bei der GFU seit Dez. 2008




Tuesday, February 23, 2010
Trainer


                  Comitter

                       ploinFaces

                       ploinMailFactory

                  Blog

                     http://www.robert-reiz.de




Tuesday, February 23, 2010
Eine Presentation ist keine Dokumentation!
       Eine Presentation soll lediglich den Speaker bei seinem
                       Vortrag unterstützen!




Tuesday, February 23, 2010
Wer kennt JSF ?




Tuesday, February 23, 2010
Was ist JSF ?




Tuesday, February 23, 2010
Standards




                             JSF 1.0 - JSR 127 - May 2004
                             JSF 1.2 - JSR 252 - May 2006
                             JSF 2.0 - JSR 314 - Julie 2009




Tuesday, February 23, 2010
Lifecycle



            Request
                                            Apply Request     Process
                             Restore View
                                               Values        Validations




             Response
                               Render          Invoke       Update Modell
                              Response       Applications      Values




Tuesday, February 23, 2010
JSF 1.2
                             xmlns:h="http://java.sun.com/jsf/html"
                             xmlns:f="http://java.sun.com/jsf/core"




                             JSF 2.0
                             xmlns:ui="http://java.sun.com/jsf/facelets"
                             xmlns:composite="http://java.sun.com/jsf/composite"

                             jsf.js




Tuesday, February 23, 2010
<h:selectOneListbox id="edit_workUnit_selectedProject"
                                        value="${managedBean[projectItem]}"
                                        style="width:200px; height:200px;"
                                        required="true">
                  	 <f:selectItems value="#{managedBean.projectList}"/>
                  </h:selectOneListbox>

                  <h:commandButton value="Speichern"
                                   actionListener="#{managedBean.doLoginListener}"
                                   action="#{loginBean.doLogin}" />




Tuesday, February 23, 2010
Tuesday, February 23, 2010
Implementierungen


                    JSF-RI
                  (mojarra)
                             MyFaces-Core


Tuesday, February 23, 2010
Flora und Fauna



         RichFaces                                    IceFaces
                     ADF               Netadvantage         Facelets
                                                        Tomahawk
                                     Trinidad
                         Orchestra                     PrimeFaces

                                        Tobago
                         Woodstock                          ploinFaces


Tuesday, February 23, 2010
Matrix




               http://www.jsfmatrix.net/



Tuesday, February 23, 2010
Nachteile von JSF 1.X



Tuesday, February 23, 2010
JSF 1.X


                   Nicht Bookmarkfähig -> PostBackPattern
                   Lange XML-Konfiguration
                   Kein Templating mit JSP
                   Kein Resourcen-Handing
                   Kein AJAX
                   Wenig Convention -> Viel Configuration



Tuesday, February 23, 2010
JSF 2.0




Tuesday, February 23, 2010
JSF 2.0 - Big changes


                             XML-Freie Konfig. mit Annotationen
                             Facelets ist der neue Standard
                               Facelets-Comp. mit Interfaces/Impl.
                             Standartisiertes AJAX
                             Bookable links/buttons




Tuesday, February 23, 2010
JSF 2.0 - Small changes


                             Neue Scopes
                             System-events
                             Direkte Navigation
                             ProjectStage
                             Neue Methoden in der FacesContext
                             ....




Tuesday, February 23, 2010
Status Quo JSF 2.0

                   JSF-RI            ploinFaces

                 (mojarra)
                                         MyFaces-Core

                         RichFaces
                                                  IceFaces

                              PrimeFaces

Tuesday, February 23, 2010
Annotations



Tuesday, February 23, 2010
@ManagedBean
                       @RequestScoped
                       public class LogInBean {

                       	     private static final long serialVersionUID = 199L;
                       	     private String loginName = "admin";
                       	     @ManagedProperty(name = "pass", value="admin")
                       	     private String password;

                             private String doNavigate(){
                               return "/page/welcome";
                             }

                       }




Tuesday, February 23, 2010
Facelets



Tuesday, February 23, 2010
Facelets



                             Nicht 1:1 übernommen
                             Templating
                             15% schneller als JSP
                             Einfache Komponentenentwicklung
                             Schnittstelle für composite-components




Tuesday, February 23, 2010
Facelets - Template

                              layout.xhtml




              login.xhtml    welcome.xhtml   myData.xhtml

Tuesday, February 23, 2010
Facelets - Template
                 <html xmlns="http://www.w3.org/1999/xhtml"
                 	   xmlns:h="http://java.sun.com/jsf/html"
                 	   xmlns:f="http://java.sun.com/jsf/core"
                 	   xmlns:ui="http://java.sun.com/jsf/facelets">
                 <h:head>
                 	   <link rel="stylesheet" type="text/css" href="../css/layout.css" />
                 </h:head>
                 <h:body>
                 	
                 	   <div id="header" align="center">
                 	   	   <ui:insert name="header">
                 	   	   	   HEADER - ${title}
                 	   	   </ui:insert>
                 	   </div>

                 	     <div id="content">
                 	     	   <ui:insert name="content">
                 	     	   	   Content
                 	     	   </ui:insert>
                 	     </div>

                 	     <div id="footer" align="center">
                 	     	   <ui:insert name="footer" >
                 	     	   	   FOOTER
                 	     	   </ui:insert>
                 	     </div>

                 </h:body>
                 </html>




Tuesday, February 23, 2010
Facelets - Template



                  <ui:composition template="/page/layout.xhtml">
                  	 <ui:param name="title" value="LOGIN SITE" />
                  	 <ui:define name="content">
                  	 	   ... Hier Inhalt
                  	 </ui:define>	
                  </ui:composition>




Tuesday, February 23, 2010
Facelets - Compon.


                             <html xmlns="http://www.w3.org/1999/xhtml"
                               xmlns:composite="http://java.sun.com/jsf/composite">
                             <head><title>MyComponent</title></head>
                             <body>

                             	   <composite:interface>
                             	     <composite:attribute name="title"/>
                             	   </composite:interface>
                             	
                             	   <composite:implementation>
                             	     <div style="border: 1px soldi red">
                             	       <h1>#{cc.attrs.title}</h1>
                                     ... XHTML oder JSF-Komponenten
                             	     </div>
                             	   </composite:implementation>

                             </body>
                             </html>




Tuesday, February 23, 2010
Facelets - Compon.



                    <html xmlns:gfu="http://java.sun.com/jsf/composite/gfu">




                   <gfu:myComponent title="Panel-Header" />




Tuesday, February 23, 2010
Clean Code




Tuesday, February 23, 2010
AJAX



Tuesday, February 23, 2010
AJAX



            <f:ajax event="keyup"
                    execute="@form"
                    render="form:result" />




Tuesday, February 23, 2010
AJAX




          <h:form id="form">
          	 <h:inputText value="#{welcomeBean.text}" >
          	 	 <f:ajax event="keyup" execute="@form" render="form:result" />
          	 </h:inputText>
          	 <h:outputText id="result" value="#{welcomeBean.text}" />
          </h:form>




Tuesday, February 23, 2010
AJAX


                             jsf.ajax.addOnError(callback)

                             jsf.ajax.addOnEvent(callback)

                             jsf.ajax.request(source, event, options)

                             jsf.ajax.response(request, context)




Tuesday, February 23, 2010
Resources



Tuesday, February 23, 2010
Resources



             <h:outputStylesheet name="css/style.css" />
             	
             <h:outputScript name="jsf.js" libary="javax.faces" target="head" />
             	
             <h:graphicImage value="#{resource['lib:gfu.gif']}" />




Tuesday, February 23, 2010
/resources/compLib/1.1/script/compScript.js

                /META-INF/resources/compLib/script/compScript.js




                [localePrefix/][libraryName/][libraryVersion/]resourceName[/resourceVersion]




Tuesday, February 23, 2010
Bookable Pages



Tuesday, February 23, 2010
Bookable



                <h:link outcome="/page/welcome" value="testLink" includeViewParams="true" >
                	 <f:param name="userId" value="5" />
                </h:link>




                       <a href="/demoJsf2/page/welcome.jsf?userId=5">testLink</a>




Tuesday, February 23, 2010
Bookable



                <h:button outcome="/page/welcome" value="testLink" includeViewParams="true" >
                	 <f:param name="userId" value="5" />
                </h:button>




               <input type="button" 
                      value="testLink" 
                      onclick="window.location.href='/demoJsf2/page/welcome.jsf?userId=5'; return false;"/>




Tuesday, February 23, 2010
Scopes



Tuesday, February 23, 2010
Scopes


                             Application
                             Session
                             Request
                             View
                             Flash
                             Custom
                             None



Tuesday, February 23, 2010
Flows/Conversation



Tuesday, February 23, 2010
Flows - ploinFaces


                             <flow id="loginFlow">
                               <views>
                                 <view>/login.xhtml</view>
                                 <view>/page/help/agbLogin.xhtml</view>
                                 <view>/page/help/haftungLogin.xhtml</view>
                               </views>
                               <attributes>
                                 <attribute>logInOutBean</attribute>
                               </attributes>
                             </flow>




Tuesday, February 23, 2010
Flows - ploinFaces



                             <flow id="useradministrationFlow">
                               <views>
                                 <view>/page/useradmin.*</view>
                               </views>
                               <attributes>
                                 <attribute>useradminBean</attribute>
                                 <attribute>secureBean</attribute>
                               </attributes>
                             </flow>




Tuesday, February 23, 2010
Flows - ploinFaces

           <authoritySource>#{sessionBean.loginUserRole}</authoritySource>

           <accessDeniedPage>/page/accessDenied.xhtml</accessDeniedPage>

           <flow id="useradministrationFlow">
             <views>
               <view>/page/useradmin.*</view>
             </views>
             <attributes>
               <attribute>useradminBean</attribute>
               <attribute>secureBean</attribute>
             </attributes>
             <includeAuthorities>
               <authority>Administrator</authority>
               <authority>GIS</authority>
             </includeAuthorities>
           </flow>



Tuesday, February 23, 2010
Clean Code




Tuesday, February 23, 2010
DEMO



Tuesday, February 23, 2010
???


Tuesday, February 23, 2010

Java Server Faces 2.0 - Der Standard für moderne und komponentenbasierte Webanwendungen

  • 1.
    JSF 2.0 Robert Reiz Tuesday, February 23, 2010
  • 2.
    Trainer Robert Reiz Dipl. Inf. (FH-Mannheim) Buch Mail-Travel-Agents auf Linux-Systemen Java-Projekte seit 2002 JSF-Erfahrung seit 2006 Gründung der PLOIN GmbH Jan. 2008 Trainer bei der GFU seit Dez. 2008 Tuesday, February 23, 2010
  • 3.
    Trainer Comitter ploinFaces ploinMailFactory Blog http://www.robert-reiz.de Tuesday, February 23, 2010
  • 4.
    Eine Presentation istkeine Dokumentation! Eine Presentation soll lediglich den Speaker bei seinem Vortrag unterstützen! Tuesday, February 23, 2010
  • 5.
    Wer kennt JSF? Tuesday, February 23, 2010
  • 6.
    Was ist JSF? Tuesday, February 23, 2010
  • 7.
    Standards JSF 1.0 - JSR 127 - May 2004 JSF 1.2 - JSR 252 - May 2006 JSF 2.0 - JSR 314 - Julie 2009 Tuesday, February 23, 2010
  • 8.
    Lifecycle Request Apply Request Process Restore View Values Validations Response Render Invoke Update Modell Response Applications Values Tuesday, February 23, 2010
  • 9.
    JSF 1.2 xmlns:h="http://java.sun.com/jsf/html" xmlns:f="http://java.sun.com/jsf/core" JSF 2.0 xmlns:ui="http://java.sun.com/jsf/facelets" xmlns:composite="http://java.sun.com/jsf/composite" jsf.js Tuesday, February 23, 2010
  • 10.
    <h:selectOneListbox id="edit_workUnit_selectedProject" value="${managedBean[projectItem]}" style="width:200px; height:200px;" required="true"> <f:selectItems value="#{managedBean.projectList}"/> </h:selectOneListbox> <h:commandButton value="Speichern" actionListener="#{managedBean.doLoginListener}" action="#{loginBean.doLogin}" /> Tuesday, February 23, 2010
  • 11.
  • 12.
    Implementierungen JSF-RI (mojarra) MyFaces-Core Tuesday, February 23, 2010
  • 13.
    Flora und Fauna RichFaces IceFaces ADF Netadvantage Facelets Tomahawk Trinidad Orchestra PrimeFaces Tobago Woodstock ploinFaces Tuesday, February 23, 2010
  • 14.
    Matrix http://www.jsfmatrix.net/ Tuesday, February 23, 2010
  • 15.
    Nachteile von JSF1.X Tuesday, February 23, 2010
  • 16.
    JSF 1.X Nicht Bookmarkfähig -> PostBackPattern Lange XML-Konfiguration Kein Templating mit JSP Kein Resourcen-Handing Kein AJAX Wenig Convention -> Viel Configuration Tuesday, February 23, 2010
  • 17.
  • 18.
    JSF 2.0 -Big changes XML-Freie Konfig. mit Annotationen Facelets ist der neue Standard Facelets-Comp. mit Interfaces/Impl. Standartisiertes AJAX Bookable links/buttons Tuesday, February 23, 2010
  • 19.
    JSF 2.0 -Small changes Neue Scopes System-events Direkte Navigation ProjectStage Neue Methoden in der FacesContext .... Tuesday, February 23, 2010
  • 20.
    Status Quo JSF2.0 JSF-RI ploinFaces (mojarra) MyFaces-Core RichFaces IceFaces PrimeFaces Tuesday, February 23, 2010
  • 21.
  • 22.
    @ManagedBean @RequestScoped public class LogInBean { private static final long serialVersionUID = 199L; private String loginName = "admin"; @ManagedProperty(name = "pass", value="admin") private String password; private String doNavigate(){ return "/page/welcome"; } } Tuesday, February 23, 2010
  • 23.
  • 24.
    Facelets Nicht 1:1 übernommen Templating 15% schneller als JSP Einfache Komponentenentwicklung Schnittstelle für composite-components Tuesday, February 23, 2010
  • 25.
    Facelets - Template layout.xhtml login.xhtml welcome.xhtml myData.xhtml Tuesday, February 23, 2010
  • 26.
    Facelets - Template <html xmlns="http://www.w3.org/1999/xhtml" xmlns:h="http://java.sun.com/jsf/html" xmlns:f="http://java.sun.com/jsf/core" xmlns:ui="http://java.sun.com/jsf/facelets"> <h:head> <link rel="stylesheet" type="text/css" href="../css/layout.css" /> </h:head> <h:body> <div id="header" align="center"> <ui:insert name="header"> HEADER - ${title} </ui:insert> </div> <div id="content"> <ui:insert name="content"> Content </ui:insert> </div> <div id="footer" align="center"> <ui:insert name="footer" > FOOTER </ui:insert> </div> </h:body> </html> Tuesday, February 23, 2010
  • 27.
    Facelets - Template <ui:composition template="/page/layout.xhtml"> <ui:param name="title" value="LOGIN SITE" /> <ui:define name="content"> ... Hier Inhalt </ui:define> </ui:composition> Tuesday, February 23, 2010
  • 28.
    Facelets - Compon. <html xmlns="http://www.w3.org/1999/xhtml" xmlns:composite="http://java.sun.com/jsf/composite"> <head><title>MyComponent</title></head> <body> <composite:interface> <composite:attribute name="title"/> </composite:interface> <composite:implementation> <div style="border: 1px soldi red"> <h1>#{cc.attrs.title}</h1> ... XHTML oder JSF-Komponenten </div> </composite:implementation> </body> </html> Tuesday, February 23, 2010
  • 29.
    Facelets - Compon. <html xmlns:gfu="http://java.sun.com/jsf/composite/gfu"> <gfu:myComponent title="Panel-Header" /> Tuesday, February 23, 2010
  • 30.
  • 31.
  • 32.
    AJAX <f:ajax event="keyup" execute="@form" render="form:result" /> Tuesday, February 23, 2010
  • 33.
    AJAX <h:form id="form"> <h:inputText value="#{welcomeBean.text}" > <f:ajax event="keyup" execute="@form" render="form:result" /> </h:inputText> <h:outputText id="result" value="#{welcomeBean.text}" /> </h:form> Tuesday, February 23, 2010
  • 34.
    AJAX jsf.ajax.addOnError(callback) jsf.ajax.addOnEvent(callback) jsf.ajax.request(source, event, options) jsf.ajax.response(request, context) Tuesday, February 23, 2010
  • 35.
  • 36.
    Resources <h:outputStylesheet name="css/style.css" /> <h:outputScript name="jsf.js" libary="javax.faces" target="head" /> <h:graphicImage value="#{resource['lib:gfu.gif']}" /> Tuesday, February 23, 2010
  • 37.
    /resources/compLib/1.1/script/compScript.js /META-INF/resources/compLib/script/compScript.js [localePrefix/][libraryName/][libraryVersion/]resourceName[/resourceVersion] Tuesday, February 23, 2010
  • 38.
  • 39.
    Bookable <h:link outcome="/page/welcome" value="testLink" includeViewParams="true" > <f:param name="userId" value="5" /> </h:link> <a href="/demoJsf2/page/welcome.jsf?userId=5">testLink</a> Tuesday, February 23, 2010
  • 40.
    Bookable <h:button outcome="/page/welcome" value="testLink" includeViewParams="true" > <f:param name="userId" value="5" /> </h:button> <input type="button"  value="testLink"  onclick="window.location.href='/demoJsf2/page/welcome.jsf?userId=5'; return false;"/> Tuesday, February 23, 2010
  • 41.
  • 42.
    Scopes Application Session Request View Flash Custom None Tuesday, February 23, 2010
  • 43.
  • 44.
    Flows - ploinFaces <flow id="loginFlow"> <views> <view>/login.xhtml</view> <view>/page/help/agbLogin.xhtml</view> <view>/page/help/haftungLogin.xhtml</view> </views> <attributes> <attribute>logInOutBean</attribute> </attributes> </flow> Tuesday, February 23, 2010
  • 45.
    Flows - ploinFaces <flow id="useradministrationFlow"> <views> <view>/page/useradmin.*</view> </views> <attributes> <attribute>useradminBean</attribute> <attribute>secureBean</attribute> </attributes> </flow> Tuesday, February 23, 2010
  • 46.
    Flows - ploinFaces <authoritySource>#{sessionBean.loginUserRole}</authoritySource> <accessDeniedPage>/page/accessDenied.xhtml</accessDeniedPage> <flow id="useradministrationFlow"> <views> <view>/page/useradmin.*</view> </views> <attributes> <attribute>useradminBean</attribute> <attribute>secureBean</attribute> </attributes> <includeAuthorities> <authority>Administrator</authority> <authority>GIS</authority> </includeAuthorities> </flow> Tuesday, February 23, 2010
  • 47.
  • 48.
  • 49.