JavaServer Faces
-
Upload
portia-carlson -
Category
Documents
-
view
41 -
download
1
description
Transcript of JavaServer Faces
JavaServer Faces
Peter Norrhall
2007-02-07
JavaServer Faces
Internet - Möjliggöraren
2007-02-07
JavaServer Faces
Internet för användare
2007-02-07
JavaServer Faces
Internet för utvecklare
Det suger!!!
2007-02-07
JavaServer Faces
Bra för konsulter
€
€€
€
€€
€
€€
€
€
€
2007-02-07
JavaServer Faces
Dåligt på lång sikt
2007-02-07
JavaServer Faces
JavaGUI Business Data
JPA
EJB 3JavaServer Faces
GWT
2007-02-07
JavaServer Faces
JavaServer Faces
2007-02-07
JavaServer Faces
Managed Beans
SearchBean { ...
private String searchInput
public String search() { ... }
}
Managed Beans
Action
2007-02-07
JavaServer Faces
Navigering
SearchBean { ...
String searchInput
String search() { ... return ”result”; }
}
Managed Beans
2007-02-07
JavaServer Faces
Navigering
2007-02-07
JavaServer Faces
Demo
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
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*
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>
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*
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*
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
2007-02-07
JavaServer Faces
Nyheterna i JSF 1.2
< Jsp 2.1 < Jsf 1.2
2007-02-07
JavaServer Faces
Unified EL
• #{searchBean.inputString} - deferred• ${searchBean.inputString} – immediate
• Implicita objekt (application, cookie, ...)• Operatorer (+.-,*,/,%,A?B:C,==,!=,...)• Uttryck (#{searchBean.search})
2007-02-07
JavaServer Faces
Nyheter i Jsf 1.2 - Sammanfattning
• http://java.sun.com/developer/technicalArticles/J2EE/jsf_12
2007-02-07
JavaServer Faces
Verktyg
Oracle JDeveloper
NetBeans
Java Studio Creator
Exadel Studio
JBuilder
SAP Developer Studio
BEA Workshop
IntelliJ IDEA
Websphere Studio
2007-02-07
JavaServer Faces
Komponentbibliotek
• JSF• MyFaces Extensions• Apache Tobago/ADF Faces (Oracle)• ICEFaces
• Netadvantage for JSF • BackBase• RichFaces (Ajax4JSF)
2007-02-07
JavaServer Faces
Förändra/skapa komponenter
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
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
2007-02-07
JavaServer Faces
JSF och Ajax
• Komponentbibliotek• Sun Blueprint AJAX components
• Ajax4JSF• Seam Remoting
2007-02-07
JavaServer Faces
Ajax4Jsf – a4j:support
2007-02-07
JavaServer Faces
Ajax4Jsf – CommandButton
<a4j:commandButton action="#{searchBean.handleSearch}” reRender=”tblSearchResult, txtSearchTerm” value="#{bundle['search.search']}"
styleClass="html-text"/>
2007-02-07
JavaServer Faces
Ajax4Jsf
• <a4j:commandLink>• <a4j:region>• <a4j:poll>• <a4j:outputPanel>
2007-02-07
JavaServer Faces
JSF Ramverk
• Apache Shale vs JBoss Seam– Dialog Manager (Conversation)– Validation– Remoting (Ajax)– Clay (Non-Jsp)– ...
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"/>
2007-02-07
JavaServer Faces
@Annoteringar - Validering
public class UserRegistrationBean {
@NotNull
public String getEmail() { return email; }
public void setEmail(String email) {
this.email = email; }
}
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>
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”
2007-02-07
JavaServer Faces
Facelets
2007-02-07
JavaServer Faces
Facelets - Våga Vägra JSP!
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
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
2007-02-07
JavaServer Faces
Produktkatalog
catalog_template.xhtml
product.xhtml
2007-02-07
JavaServer Faces
Facelets – enklare att
• Skapa egna komponenter• Skapa valideringsfunktioner• Skapa ”taggar”
• Skicka parametrar mellan sidor• Exadel Studio
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
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>
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
2007-02-07
JavaServer Faces
Summering