JavaServer Faces

45
JavaServer Faces Peter Norrhall

description

JavaServer Faces. Peter Norrhall. Internet - Möjliggöraren. Internet för användare. Internet för utvecklare. Det suger!!!. €. €. €. €. €. €. €. €. €. €. €. €. Bra för konsulter. Dåligt på lång sikt. Java. GUI. Data. Business. JavaServer Faces. EJB 3. JPA. GWT. - PowerPoint PPT Presentation

Transcript of JavaServer Faces

Page 1: JavaServer Faces

JavaServer Faces

Peter Norrhall

Page 2: JavaServer Faces

2007-02-07

JavaServer Faces

Internet - Möjliggöraren

Page 3: JavaServer Faces

2007-02-07

JavaServer Faces

Internet för användare

Page 4: JavaServer Faces

2007-02-07

JavaServer Faces

Internet för utvecklare

Det suger!!!

Page 5: JavaServer Faces

2007-02-07

JavaServer Faces

Bra för konsulter

€€

€€

€€

Page 6: JavaServer Faces

2007-02-07

JavaServer Faces

Dåligt på lång sikt

Page 7: JavaServer Faces

2007-02-07

JavaServer Faces

JavaGUI Business Data

JPA

EJB 3JavaServer Faces

GWT

Page 8: JavaServer Faces

2007-02-07

JavaServer Faces

JavaServer Faces

Page 9: JavaServer Faces

2007-02-07

JavaServer Faces

Managed Beans

SearchBean { ...

private String searchInput

public String search() { ... }

}

Managed Beans

Action

Page 10: JavaServer Faces

2007-02-07

JavaServer Faces

Navigering

SearchBean { ...

String searchInput

String search() { ... return ”result”; }

}

Managed Beans

Page 11: JavaServer Faces

2007-02-07

JavaServer Faces

Navigering

Page 12: JavaServer Faces

2007-02-07

JavaServer Faces

Demo

Page 13: JavaServer Faces

2007-02-07

JavaServer Faces

Restore View

UIViewRoot

HtmlForm

HtmlMessage

HtmlInputText

HtmlCommandButton

UI Component Tree

RestoreView

Apply Request Values

ProcessValidations

Update Model Values

Process Events

Invoke Application

RenderResponse

Process Events

Process Events

Process Events

Page 14: JavaServer Faces

2007-02-07

JavaServer Faces

Apply Request Values

UIViewRoot

HtmlForm

HtmlMessage

HtmlInputText

HtmlCommandButton

UI Component Tree

RestoreView

Apply Request Values

ProcessValidations

Update Model Values

Process Events

Invoke Application

RenderResponse

Process Events

Process Events

Process Events

Multi*

Page 15: JavaServer Faces

2007-02-07

JavaServer Faces

Process Validations

SearchBean { ...

String searchInput

String search() { ... }

}

Managed Beans

UIViewRoot

HtmlForm

HtmlMessage

HtmlInputText

HtmlCommandButton

UI Component Tree

RestoreView

Apply Request Values

ProcessValidations

Update Model Values

Process Events

Invoke Application

RenderResponse

Process Events

Process Events

Process Events

Multi*

<h:inputText id="email" value="#{UserRegistration.user.email}" validator="#{UserRegistration.validateEmail}" required="true">

</h:inputText>

Page 16: JavaServer Faces

2007-02-07

JavaServer Faces

Update Model Values

SearchBean { ...

String searchInput

String search() { ... }

}

Managed Beans

UIViewRoot

HtmlForm

HtmlMessage

HtmlInputText

HtmlCommandButton

UI Component Tree

RestoreView

Apply Request Values

ProcessValidations

Update Model Values

Process Events

Invoke Application

RenderResponse

Process Events

Process Events

Process Events

Multi*

Page 17: JavaServer Faces

2007-02-07

JavaServer Faces

Invoke Application

UIViewRoot

HtmlForm

RestoreView

Apply Request Values

ProcessValidations

Update Model Values

Process Events

Invoke Application

RenderResponse

Process Events

Process Events

Process Events

HtmlMessage

HtmlInputText

HtmlCommandButton

SearchBean { ... List result

String searchInput

String search() { ... }

}

Managed BeansUI Component Tree Multi*

Page 18: JavaServer Faces

2007-02-07

JavaServer Faces

Render ResponseRestore

ViewApply

Request ValuesProcess

Validations

Update Model Values

Process Events

Invoke Application

RenderResponse

Process Events

Process Events

Process Events

UIViewRoot

HtmlDataTable

UIColumn

HtmlInputText

UI Component Tree

UIColumn

HtmlInputText

UIColumn

HtmlInputTextSearchBean { ... List result

String searchInput

String search() { ... }

}

Managed Beans

Page 19: JavaServer Faces

2007-02-07

JavaServer Faces

Nyheterna i JSF 1.2

< Jsp 2.1 < Jsf 1.2

Page 20: JavaServer Faces

2007-02-07

JavaServer Faces

Unified EL

• #{searchBean.inputString} - deferred• ${searchBean.inputString} – immediate

• Implicita objekt (application, cookie, ...)• Operatorer (+.-,*,/,%,A?B:C,==,!=,...)• Uttryck (#{searchBean.search})

Page 21: JavaServer Faces

2007-02-07

JavaServer Faces

Nyheter i Jsf 1.2 - Sammanfattning

• http://java.sun.com/developer/technicalArticles/J2EE/jsf_12

Page 22: JavaServer Faces

2007-02-07

JavaServer Faces

Verktyg

Oracle JDeveloper

NetBeans

Java Studio Creator

Exadel Studio

JBuilder

SAP Developer Studio

BEA Workshop

IntelliJ IDEA

Websphere Studio

Page 23: JavaServer Faces

2007-02-07

JavaServer Faces

Komponentbibliotek

• JSF• MyFaces Extensions• Apache Tobago/ADF Faces (Oracle)• ICEFaces

• Netadvantage for JSF • BackBase• RichFaces (Ajax4JSF)

Page 24: JavaServer Faces

2007-02-07

JavaServer Faces

Förändra/skapa komponenter

Page 25: JavaServer Faces

2007-02-07

JavaServer Faces

Förändra komponenter

• Egenskaper• CSS

<h:inputText id="email" value="#{UserRegistration.user.email}" validator="#{UserRegistration.validateEmail}" required="true"> </h:inputText>

RestoreView

Apply Request Values

ProcessValidations

Update Model Values

Process Events

Invoke Application

RenderResponse

Process Events

Process Events

Process Events

Page 26: JavaServer Faces

2007-02-07

JavaServer Faces

Skapa en komponentdd CreateComponent

UIComponent

Foo

+ COMPONENT_TYPE: String = se.movlin.jsf.c...+ RENDERER_TYPE: String = se.movlin.jsf.r...# bar: String# state: Object

+ Foo()+ getFamily() : String+ «property get» getBar() : String+ «property set» setBar(String) : void+ restoreState(Object, FacesContext) : void+ saveState(FacesContext) : Object

Renderer

FooRenderer

+ encodeBegin() : void

UIComponentTag/ElTag

FooTag

# bar: String

+ getRenderType() : String+ getComponentType() : String+ setProperties(UIComponent) : void

«tld»

foo«xml»

faces-config

«xml»

foo.taglib

Page 27: JavaServer Faces

2007-02-07

JavaServer Faces

JSF och Ajax

• Komponentbibliotek• Sun Blueprint AJAX components

• Ajax4JSF• Seam Remoting

Page 28: JavaServer Faces

2007-02-07

JavaServer Faces

Ajax4Jsf – a4j:support

Page 29: JavaServer Faces

2007-02-07

JavaServer Faces

Ajax4Jsf – CommandButton

<a4j:commandButton action="#{searchBean.handleSearch}” reRender=”tblSearchResult, txtSearchTerm” value="#{bundle['search.search']}"

styleClass="html-text"/>

Page 30: JavaServer Faces

2007-02-07

JavaServer Faces

Ajax4Jsf

• <a4j:commandLink>• <a4j:region>• <a4j:poll>• <a4j:outputPanel>

Page 31: JavaServer Faces

2007-02-07

JavaServer Faces

JSF Ramverk

• Apache Shale vs JBoss Seam– Dialog Manager (Conversation)– Validation– Remoting (Ajax)– Clay (Non-Jsp)– ...

Page 32: JavaServer Faces

2007-02-07

JavaServer Faces

JBoss Seam

SearchBean { ... List result

String searchInput

String search() { ... }

}

Managed Beans@Stateless@Name(”searchBean”)public class SearchBean implements Search{

@Out List <SearchResult> result;

@In @Out String searchInput

String search() { ... }}

EJB 3

<h:commandButton action="#{searchBean.search}" value="#{bundle['search.search']}" styleClass="html-text"/>

Page 33: JavaServer Faces

2007-02-07

JavaServer Faces

@Annoteringar - Validering

public class UserRegistrationBean {

@NotNull

@Email

public String getEmail() { return email; }

public void setEmail(String email) {

this.email = email; }

}

Page 34: JavaServer Faces

2007-02-07

JavaServer Faces

Seam – Ajax Remoting

@Localpublic interface Search { @WebRemote public String suggest(String name);}

@Name(”search”)public class SearchAction implements Search {

public String suggest(String name) { String suggestion = null; ... return suggestion; }

}

<script language=”javascript”> // get the remote Search var search = Seam.Component.getInstance(”search”); function suggest(name) { search.suggest(name, suggestCallback); }

function suggestCallback(suggestion) { form.suggestion.value = suggestion; }</script>

Page 35: JavaServer Faces

2007-02-07

JavaServer Faces

JBoss Seam

• Fogar samman JSF och EJB 3 (Web Beans)

• @Annoteringar – Ut med XML-konfig• AJAX för en bättre värld• Conversation – Stöd för tillståndsfulla

multipla ”konversationer”

Page 36: JavaServer Faces

2007-02-07

JavaServer Faces

Facelets

Page 37: JavaServer Faces

2007-02-07

JavaServer Faces

Facelets - Våga Vägra JSP!

Page 38: JavaServer Faces

2007-02-07

JavaServer Faces

Facelets - Mallbaserat

bottom

top

rightcontainer

template.xhtml

.top{ margin: 0px; padding: 0px; height: 58px; width: 770px; font: 20px Verdana, Tahoma, Arial text-decoration-none}

.right {

...}

.bottom {

...}

.container {

...}

template.css

Page 39: JavaServer Faces

2007-02-07

JavaServer Faces

<ui:define name=”container">...

<h:graphicImage value=”...”/>

...

</ui:define>

Produktkatalog

ShoppingCart/CompanyInfo (bottom)

Menu (top)

Branding (right)

<ui:insert name=”container”> container</ui:insert

catalog_template.xhtml

<ui:define name=”container">...

<h:graphicImage value=”...”/>

...

</ui:define>

category.xhtml

<ui:composition template="/templates/catalog_template.xhtml">

product.xhtml

Page 40: JavaServer Faces

2007-02-07

JavaServer Faces

Produktkatalog

catalog_template.xhtml

product.xhtml

Page 41: JavaServer Faces

2007-02-07

JavaServer Faces

Facelets – enklare att

• Skapa egna komponenter• Skapa valideringsfunktioner• Skapa ”taggar”

• Skicka parametrar mellan sidor• Exadel Studio

Page 42: JavaServer Faces

2007-02-07

JavaServer Faces

Prestanda

Server/Client

0

10

20

30

40

50

60

70

80

Server/1.2 Server/1.2_03 Client/1.2 Client/1.2_03

Operations/Second

Page 43: JavaServer Faces

2007-02-07

JavaServer Faces

Cache is King

<s:cache key=”art_93682” enabled=”true”

<h:outputText value=”#{art.title}”/>

<h:outputText value=”#{art.header}”/><h:outputText value=”#{art.body}”/>

</s:cache>

Page 44: JavaServer Faces

2007-02-07

JavaServer Faces

JSF 2.0

• Web Beans JSR 299 - JBoss• Oracles JSR för att uttöka designtime

stödet i GUIbyggare• http

://www.jsfcentral.com/listings/A10880?link

Page 45: JavaServer Faces

2007-02-07

JavaServer Faces

Summering