java server faces 2.0 - der standard für moderne und komponentenbasierte webanwendungen
DESCRIPTION
JSF (JavaServer Faces) ist seit 2004 der Standard für komponentenbasierte Webanwendungen. Anfangs nur belächelt und als Intranetlösung abgetan, ist JSF heute eine stabile Grundlage, auch für Webanwendungen im Internet. Seit Juni 2009 ist mit JSR 314 die Version 2.0 fertig spezifiziert. Dieser Vortrag von Robert Reiz gibt eine kurze Einführung in die Grundlagen, einen kurzen geschichtlichen Rückblick und eine Einführung in die neuen Features von JSF 2.0. Grundlagen und Rückblick Vorstellung von JSF 2.0 FazitTRANSCRIPT
JSF 2.0Robert Reiz
Tuesday, February 23, 2010
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
Trainer
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
JSF 1.0 - JSR 127 - May 2004 JSF 1.2 - JSR 252 - May 2006 JSF 2.0 - JSR 314 - Julie 2009
Standards
Tuesday, February 23, 2010
Restore ViewApply Request
ValuesProcess
Validations
Update Modell Values
Invoke Applications
Render Response
Request
Response
Lifecycle
Tuesday, February 23, 2010
xmlns:h="http://java.sun.com/jsf/html"xmlns:f="http://java.sun.com/jsf/core"
xmlns:ui="http://java.sun.com/jsf/facelets"
jsf.js
JSF 1.2
JSF 2.0
xmlns:composite="http://java.sun.com/jsf/composite"
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 IceFacesADF
TrinidadOrchestra
Tomahawk
PrimeFaces
ploinFacesTobago
Netadvantage
Woodstock
Facelets
Tuesday, February 23, 2010
Matrix
http://www.jsfmatrix.net/
Tuesday, February 23, 2010
Nachteile von JSF 1.X
Tuesday, February 23, 2010
Nicht Bookmarkfähig -> PostBackPattern Lange XML-Konfiguration Kein Templating mit JSP Kein Resourcen-Handing Kein AJAX Wenig Convention -> Viel Configuration
JSF 1.X
Tuesday, February 23, 2010
JSF 2.0
Tuesday, February 23, 2010
XML-Freie Konfig. mit Annotationen Facelets ist der neue Standard
Facelets-Comp. mit Interfaces/Impl. Standartisiertes AJAX Bookable links/buttons
JSF 2.0 - Big changes
Tuesday, February 23, 2010
Neue Scopes System-events Direkte Navigation ProjectStage Neue Methoden in der FacesContext ....
JSF 2.0 - Small changes
Tuesday, February 23, 2010
Status Quo JSF 2.0
JSF-RI (mojarra)
MyFaces-Core
RichFacesIceFaces
PrimeFaces
ploinFaces
Tuesday, February 23, 2010
Annotations
Tuesday, February 23, 2010
@ManagedBean@RequestScopedpublic 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
Nicht 1:1 übernommen Templating 15% schneller als JSP Einfache Komponentenentwicklung Schnittstelle für composite-components
Facelets
Tuesday, February 23, 2010
layout.xhtml
login.xhtml myData.xhtmlwelcome.xhtml
Facelets - Template
Tuesday, February 23, 2010
<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>
Facelets - Template
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
<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>
Facelets - Compon.
Tuesday, February 23, 2010
<html xmlns:gfu="http://java.sun.com/jsf/composite/gfu">
<gfu:myComponent title="Panel-Header" />
Facelets - Compon.
Tuesday, February 23, 2010
Clean Code
Tuesday, February 23, 2010
AJAX
Tuesday, February 23, 2010
<f:ajax event="keyup" execute="@form" render="form:result" />
AJAX
Tuesday, February 23, 2010
<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>
AJAX
Tuesday, February 23, 2010
jsf.ajax.request(source, event, options)
jsf.ajax.response(request, context)
jsf.ajax.addOnEvent(callback)
jsf.ajax.addOnError(callback)
AJAX
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
[localePrefix/][libraryName/][libraryVersion/]resourceName[/resourceVersion]
/META-INF/resources/compLib/script/compScript.js
/resources/compLib/1.1/script/compScript.js
Tuesday, February 23, 2010
Bookable Pages
Tuesday, February 23, 2010
<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>
Bookable
Tuesday, February 23, 2010
<h:button outcome="/page/welcome" value="testLink" includeViewParams="true" > <f:param name="userId" value="5" /></h:button>
Bookable
<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
Application Session Request View Flash Custom None
Scopes
Tuesday, February 23, 2010
Flows/Conversation
Tuesday, February 23, 2010
<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>
Flows - ploinFaces
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
<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>
Flows - ploinFaces
Tuesday, February 23, 2010
Clean Code
Tuesday, February 23, 2010
DEMO
Tuesday, February 23, 2010
? ? ?
Tuesday, February 23, 2010