JavaServer Faces Zdeněk Troníček
JSF aplikace web.xml Faces servlet
faces-config.xml JSF (*.jsp) Backing Beans (*.java) model (*.java) libraries
<%@taglib prefix="f" uri="..." %> <%@taglib prefix="h" uri="..." %> ...
Hi, expression language: #{...}
27.5.2009
CZJUG: JavaServer Faces
2
Requests initial request
postback request
27.5.2009
<%@taglib prefix="f" uri="..." %> <%@taglib prefix="h" uri="..." %> ...
CZJUG: JavaServer Faces
3
Backing Bean public class UserBean { private String name; private int age; //public UserBean() { } public String getName() { return user; } public void setName( String name ) { this.name = name; } public int getAge() { return age; } public void setAge( int age ) { this.age = age; } } 27.5.2009
CZJUG: JavaServer Faces
initial response: getter postback response: getter
initial response: getter postback request: setter postback response: getter
4
Příklad <%@taglib prefix="f" uri="http://java.sun.com/jsf/core" %> <%@taglib prefix="h" uri="http://java.sun.com/jsf/html" %> ...
27.5.2009
CZJUG: JavaServer Faces
Initial: 1. UserBean.getName() Postback: 2. UserBean.setName() 3. UserBean.store() 4. UserBean.getName()
5
Managed Bean (faces-config.xml)
... <managed-bean> <managed-bean-name>user <managed-bean-class> x36tjv.UserBean <managed-bean-scope>request ... scope request session 27.5.2009
application none
CZJUG: JavaServer Faces
6
Navigace (faces-config.xml)
… /first.jsp next /second.jsp ...
first.jsp "next"
second.jsp
statická navigace:
27.5.2009
CZJUG: JavaServer Faces
7
Dynamická navigace
public class UserBean { … public String store() { if (…) { return "home"; } return "next"; } }
27.5.2009
first.jsp "next"
"home"
second.jsp
home.jsp
CZJUG: JavaServer Faces
8
Konverze řetězec
javovský objekt
BigDecimalConverter BigIntegerConverter BooleanConverter ByteConverter CharacterConverter 27.5.2009
DateTimeConverter DoubleConverter EnumConverter FloatConverter IntegerConverter CZJUG: JavaServer Faces
LongConverter NumberConverter ShortConverter
9
Konvertor class PhoneConverter implements Converter { public Object getAsObject( FacesContext fc, UIComponent comp, String value ) { // String Object (ConverterException) } public String getAsString( FacesContext fc, UIComponent comp, Object value ) { // Object String (ConverterException) } } faces-config.xml
x36tjv.Phone x36tjv.PhoneConverter 27.5.2009
CZJUG: JavaServer Faces
10
Validace form data validation business-logic validation
DoubleRangeValidator LongRangeValidator LengthValidator – délka řetězce
27.5.2009
CZJUG: JavaServer Faces
11
Validátor class PhoneValidator implements Validator { public void validate( FacesContext fc, UIComponent comp, Object value ) throws ValidatorException { ... } } faces-config.xml
phoneValidator x36tjv.PhoneValidator JSP
27.5.2009
CZJUG: JavaServer Faces
12
Lokalizace JSP
messages_en.properties appName=DVD Library messages_cs.properties appName=Knihovna DVD
faces-config.xml
<default-locale>en <supported-locale>cs <message-bundle>messages 27.5.2009
CZJUG: JavaServer Faces
13
Component Tree Client side
Server side UIViewRoot
HtmlOutputText
Welcome to JSF!
HtmlForm HtmlInputText find
27.5.2009
HtmlCommandButton
CZJUG: JavaServer Faces
14
Request Life Cycle
27.5.2009
postavení stromu
vyčtení parametrů
konverze a validace
Restore View
Apply Request Values
Process Validations
Render Response
Invoke Application
Update Model Values
vytvoření odpovědi
akce a navigace
uložení hodnot
CZJUG: JavaServer Faces
15
Initial Request postavení stromu
vyčtení parametrů
konverze a validace
Restore View
Apply Request Values
Process Validations
Render Response
Invoke Application
Update Model Values
akce a navigace
uložení hodnot
vytvoření odpovědi 27.5.2009
CZJUG: JavaServer Faces
16
Postback Request
27.5.2009
postavení stromu
vyčtení parametrů
konverze a validace
Restore View
Apply Request Values
Process Validations
Render Response
Invoke Application
Update Model Values
vytvoření odpovědi
akce a navigace
uložení hodnot
CZJUG: JavaServer Faces
17
Events postavení stromu
vyčtení parametrů
Restore View
Apply Request Values
konverze a validace Process Events
Process Validations
Process Events
Conversion/validation error
Render Response
vytvoření odpovědi 27.5.2009
Process Events
Invoke Application
akce a navigace CZJUG: JavaServer Faces
Process Events
Update Model Values uložení hodnot
18
Process Validations
FacesContext: addMessage() 27.5.2009
CZJUG: JavaServer Faces
PhoneConverter: getAsObject() ok
error
PhoneValidator: validate() ok ZipCodeConverter: getAsObject() ok
error
ZipCodeValidator: validate() ok 19
Render Response StateHolder Zahrnuje: • vytvoření odpovědi • uložení stavu komponent
Object saveState( FacesContext fc ) void restoreState( FacesContext fc, Object state )
web.xml <param-name> javax.faces.STATE_SAVING_METHOD <param-value>client
27.5.2009
CZJUG: JavaServer Faces
20
Render Response (2) Invoke Application
Invoke Application
initial request Render Response
Render Response
navigace nový strom komponent 27.5.2009
bez navigace původní strom komponent
CZJUG: JavaServer Faces
21
Property “immediate”
ActionSource ActionEvent
Restore View
Apply Request Values
doručena ActionEvent
ActionListener
DefaultActionListener Render Response
27.5.2009
1. akce 2. navigace
CZJUG: JavaServer Faces
22
Property “immediate” (2)
konverze validace Restore View
27.5.2009
Apply Request Values
EditableValueHolder: UIInput UISelectBoolean UISelectOne UISelectMany
Process Validations
CZJUG: JavaServer Faces
23
JSF komponenty
Tag inputText, selectOneListbox, selectOneMenu, selectOneRadio, selectManyListbox,...
UIComponent UIInput, UISelectOne, UISelectMany,...
Renderer Text, Secret, Listbox, Menu, Radio,...
Př.: UIInput + Text = inputText UISelectOne + Listbox = selectOneListbox 27.5.2009
CZJUG: JavaServer Faces
24
Q&A Děkuji za pozornost