JSF

Transkript

JSF
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="..." %>
<html>
<head>...</head>
<body>
<f:view>
Hi,
<h:outputText
value="#{user.name}"/>
</f:view>
</body>
</html>
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="..." %>
<html>
<head>...</head>
<body>
<f:view>
<h:form>
<h:inputText
value="#{user.name}"/>
<h:commandButton
value="send"
action="#{user.store}"/>
<h:form>
</f:view>
</body>
</html>
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
<h:outputText
value="#{user.name}"/>
initial response: getter
postback response: getter
<h:inputText
value="#{user.age}"/>
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" %>
<html>
<head>...</head>
<body>
<f:view>
<h:form>
<h:inputText value="#{user.name}"/>
<h:commandButton value="send"
action="#{user.store}"/>
</h:form>
</f:view>
</body>
</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)
<faces-config>
...
<managed-bean>
<managed-bean-name>user</managed-bean-name>
<managed-bean-class>
x36tjv.UserBean
</managed-bean-class>
<managed-bean-scope>request</managed-bean-scope>
</managed-bean>
...
</faces-config>
scope
request
session
27.5.2009
application
none
CZJUG: JavaServer Faces
6
Navigace (faces-config.xml)
<faces-config>
…
<navigation-rule>
<from-view-id>/first.jsp</from-view-id>
<navigation-case>
<from-outcome>next</from-outcome>
<to-view-id>/second.jsp</to-view-id>
</navigation-case>
</navigation-rule>
...
</faces-config>
first.jsp
"next"
second.jsp
statická navigace:
<h:commandButton value="send" action="next"/>
27.5.2009
CZJUG: JavaServer Faces
7
Dynamická navigace
<h:commandButton value="send" action="#{user.store}"/>
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
<h:inputText value="#{dvd.year}"
required="true">
<f:convertDateTime pattern="yyyy"/>
</h:inputText>
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
<converter>
<converter-for-class>x36tjv.Phone</converter-for-class>
<converter-class>x36tjv.PhoneConverter</converter-class>
</converter>
27.5.2009
CZJUG: JavaServer Faces
10
Validace
form data validation
business-logic validation
<h:inputText value="#{app.length}">
<f:validateDoubleRange minimum="0"
maximum="100"/>
</h:inputText>
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
<validator>
<validator-id>phoneValidator</validator-id>
<validator-class>x36tjv.PhoneValidator</validator-class>
</validator>
JSP
<h:inputText value="#{user.phone}">
<f:validator validatorId="phoneValidator"/>
</h:inputText>
27.5.2009
CZJUG: JavaServer Faces
12
Lokalizace
JSP
<f:view>
<f:loadBundle basename="messages"
var="msg"/>
<h:outputText
value="#{msg.appName}"/>
</f:view>
messages_en.properties
appName=DVD Library
messages_cs.properties
appName=Knihovna DVD
faces-config.xml
<application>
<locale-config>
<default-locale>en</default-locale>
<supported-locale>cs</supported-locale>
</locale-config>
<message-bundle>messages</message-bundle>
</application>
27.5.2009
CZJUG: JavaServer Faces
13
Component Tree
Client side
Server side
UIViewRoot
<f:view>
HtmlOutputText
<h:outputText>
Welcome to JSF!
HtmlForm
<h:form>
HtmlInputText
<h:inputText>
find
27.5.2009
HtmlCommandButton
<h:commandButton>
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
<h:inputText value="#{user.phone}">
<f:converter
converterId="PhoneConverter"/>
<f:validator
validatorId="PhoneValidator"/>
</h:inputText>
<h:inputText value="#{addr.zipCode}">
<f:converter
converterId="ZipCodeConverter"/>
<f:validator
validatorId="ZipCodeValidator"/>
</h:inputText>
<h:messages/>
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
<context-param>
<param-name>
javax.faces.STATE_SAVING_METHOD
</param-name>
<param-value>client</param-value>
</context-param>
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”
<h:commandLink immediate="true" … />
<h:commandButton immediate="true" … />
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)
<h:inputText immediate="true" … />
<h:selectBooleanCheckbox immediate="true" … />
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

Podobné dokumenty

JSP

JSP <%@ taglib uri="vsjava-taglib.tld" prefix="vsjava" %> <vsjava:example />

Více

road.bin editor manual

road.bin editor manual s názvem modelu chodce je ukončen nulovým bajtem a zbytek je vyplněn také nulovými bajty do celkového počtu dvaceti bajtů jedné položky. Položek je tolik, kolik se určeno hodnotou pře...

Více

Česká Java User Group (CZJUG) a Platforma informačních

Česká Java User Group (CZJUG) a Platforma informačních Česká Java User Group (CZJUG) a Platforma informačních technologií (PIT) Vás zvou na Plzeňské setkání české Java User Group KDY? v úterý 13. dubna 2010 KDE? v areálu Západočeské univerzity v Plzni,...

Více

Applet Architektura Java EE - 4 vrstvá CGI

Applet Architektura Java EE - 4 vrstvá CGI – technologie pro tvorbu webových a distribuovaných aplikací – standard pro komunikaci dvou aplikací – vyuţívá protokoly SOAP, HTTP a jazyk XML, WSDL

Více

OAuth

OAuth authorization in a simple and standard method from desktop and web applications

Více

check.bin editor manual

check.bin editor manual • AI ke zorientovánı́ se v prostoru (AI pro nepřátele a paniku) Navigace jsou lineárně propojené body. Napřı́klad navigace pro chodce tvořı́ cestu, ovšem navigace pro AI je jakási mřı́ž...

Více