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

Preview:

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 Fazit

Citation preview

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

Recommended