Pobierz prezentację
Pobieranie prezentacji. Proszę czekać
1
Java Server Faces Tomasz Nowak
2
Konspekt Historia Wstęp Architektura JSF Składniki aplikacji JSF
3
Historia 1. Serwlety 2. JSP 3. Struts
4
Wstęp Projekt Sun Microsystems JSF - specyfikacja JSF 1.0 (2004-03-11)
Połączenie Struts i Swinga
5
Architektura JSF API do reprezentacji komponentów, zarządzania stanem, obsługi zdarzeń i walidacji Biblioteki znaczników do opisu interfejsu użytkownika
6
Składniki aplikacji JSF
Backing Beans Strony JSP Komponenety UI Pomocnicze klasy po stronie serwera Walidatory, obsługa zdarzeń oraz obsługa nawigacji Plik konfiguracji zasobów
7
Przykład – greeting.jsp
8
Przykład – greeting.jsp
9
Przykład – response.jsp
10
Kontroler JSF Serwlet FacesServlet pełni funkcję kontrolera
<servlet-name>FacesServlet</servlet-name> <servlet-class>javax.faces.webapp.FacesServlet</servlet-class> </servlet> <servlet-mapping> <url-pattern>/guess/*</url-pattern> </servlet-mapping> Serwlet FacesServlet pełni funkcję kontrolera Pojedynczy punkt wejścia do aplikacji (web.xml) Konfiguracja poprzez plik faces-config.xml
11
Backing Bean Spełnia reguły JavaBeans
Właściwości i metody związane z komponentami użytkownika Dodatkowo: - walidacja - obsługa zdarzeń - nawigacja
12
Backing Bean public class UserNumberBean { Integer randomInt = null;
Integer userNumber = null; String response = null; private long maximum = 0; private long minimum = 0; public UserNumberBean() { …} public String getResponse() {…} …
13
Managed-bean (faces-config.xml)
<managed-bean-name> UserNumberBean </managed-bean-name> <managed-bean-class> guessNumber.UserNumberBean </managed-bean-class> <managed-bean-scope> session </managed-bean-scope> <managed-property> <property-name>minimum</property-name> <property-class>long</property-class> <value>0</value> </managed-property>
14
Strona JSF <HTML xmlns=" <HEAD> <title>Hello</title> </HEAD> page contentType="application/xhtml+xml" %> taglib uri=" prefix="h" %> taglib uri=" prefix="f" %> <body> <f:view> <h:form id="helloForm1"> … </h:form> </f:view> </body> </HTML>
15
Strona JSF - omowienie <h2>
Hi. My name is Lock. I'm thinking of a number from <h:outputText value="#{UserNumberBean.minimum}"/> to <h:outputText value="#{UserNumberBean.maximum}"/>. Can you guess it? </h2>
16
Strona JSF - omówienie <h:inputText id="userNo"
value="#{UserNumberBean.userNumber}" converterMessage="#{ErrMsg.userNoConvert}"> <f:validateLongRange minimum="#{UserNumberBean.minimum}" maximum="#{UserNumberBean.maximum}" /> </h:inputText> <h:commandButton id="submit" action="success" value="Submit" /> … <h:message id="errors1" for="userNo"/>
17
Walidacja Walidacja w metodzie BackingBeana
Niejawna walidacja automatyczna (atrybutu REQUIRED) Predefiniowane walidatory ( f:validateLength, f:validateDoubleRange, f:validateLongRange) Własne walidatory (implementujące interfejs Validator, rejestrowane w faces-config.xml)
18
Komunikaty o błędzie Pliki *.properties ApplicationMessages.properties
userNoConvert=The value you entered is not a number.
19
Komunikaty o błędzie (faces-config)
<application> <resource-bundle> <base-name> guessNumber.ApplicationMessages </base-name> <var>ErrMsg</var> </resource-bundle> </application>
20
Komunikaty o błędzie <h:inputText id="userNo" label="User Number"
value="#{UserNumberBean.userNumber}" converterMessage="#{ErrMsg.userNoConvert}"> ... </h:inputText>
21
Nawigacja faces-config.xml <navigation-rule>
<from-view-id>/greeting.jsp</from-view-id> <navigation-case> <from-outcome>success</from-outcome> <to-view-id>/response.jsp</to-view-id> </navigation-case> </navigation-rule> greeting.jsp <h:commandButton id="submit" action="success" />
22
response.jsp response.jsp <h:outputText id="result"
value="#{UserNumberBean.response}"/> UserNumberBean.java public String getResponse() { if ((userNumber != null) && (userNumber.compareTo(randomInt) == 0)) return "Yay! You got it!"; else return "Sorry, " + userNumber + " is incorrect.";
23
Procedury obsługi zdarzeń
ActionListener ValueChangeListener
24
ActionListener <h:commandButton actionListener=”#bean.sideEffect}”
Immediate=„true”/> public void sideEffect(ActionEvent event) { //np. aktywacja/deaktywacja innych //elementów formularza
25
ValueChangeListener <h:commandButton value=‘Zaloguj’ disabled=”true”/> <h:selectBooleanCheckbox binding=”#{loginBean.selectBooleanCheckbox1}” id=”selectBooleanCheckbox” valueChangeListener=”loginBean.checkbox1Changed}” onchange=”submit()”/> Public void checkbox1Changed(ValueChangeEvent valueChangeEvent) { if(selectBooleanCheckbox1.isSelected()) commandButton1.setDisabled(false); FacesContext context = FacesContext.getCurrentInstance(); context.renderResponse();
26
Internacjonalizacja (faces-config)
<application> <message-bundle> com.sun.bookstore6.resources.ApplicationMessages </message-bundle> <resource-bundle> <base-name> com.sun.bookstore6.resources.CustomMessages </base-name> <var>customMessages</var> </resource-bundle> <locale-config> <default-locale>en</default-locale> <supported-locale>es</supported-locale> <supported-locale>de</supported-locale> <supported-locale>fr</supported-locale> </locale-config> </application>
27
Internacjonalizacja <f:loadBundle var=” customMessages” />
String current = event.getComponent().getId(); FacesContext context =FacesContext.getCurrentInstance(); context.getViewRoot() .setLocale((Locale) locales.get(current));
28
Źródła http://java.sun.com/javaee/javaserverfaces/ - strona domowa
- tutorial – prezentacja o JSF
Podobne prezentacje
© 2024 SlidePlayer.pl Inc.
All rights reserved.