Java Server Faces

28
Java Server Faces Tomasz Nowak

description

Java Server Faces. Tomasz Nowak. Konspekt. Historia Wstęp Architektura JSF Składniki aplikacji JSF. Historia. 1. Serwlety 2. JSP 3. Struts. Wstęp. Projekt Sun Microsystems JSF - specyfikacja JSF 1.0 (2004-03-11) JSF 1.2 (2006-05-11) Połączenie Struts i Swinga. Architektura JSF. - PowerPoint PPT Presentation

Transcript of Java Server Faces

Page 1: Java Server Faces

Java Server Faces

Tomasz Nowak

Page 2: Java Server Faces

Konspekt

1. Historia

2. Wstęp

3. Architektura JSF

4. Składniki aplikacji JSF

Page 3: Java Server Faces

Historia

1. Serwlety

2. JSP

3. Struts

Page 4: Java Server Faces

Wstęp

• Projekt Sun Microsystems

• JSF - specyfikacja

• JSF 1.0 (2004-03-11)

• JSF 1.2 (2006-05-11)

• Połączenie Struts i Swinga

Page 5: Java Server Faces

Architektura JSF

• API do reprezentacji komponentów, zarządzania stanem, obsługi zdarzeń i walidacji

• Biblioteki znaczników do opisu interfejsu użytkownika

Page 6: Java Server Faces

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

Page 7: Java Server Faces

Przykład – greeting.jsp

Page 8: Java Server Faces

Przykład – greeting.jsp

Page 9: Java Server Faces

Przykład – response.jsp

Page 10: Java Server Faces

Kontroler JSF

• Serwlet FacesServlet pełni funkcję kontrolera• Pojedynczy punkt wejścia do aplikacji (web.xml)• Konfiguracja poprzez plik faces-config.xml

<servlet>

<servlet-name>FacesServlet</servlet-name>

<servlet-class>javax.faces.webapp.FacesServlet</servlet-class>

</servlet>

<servlet-mapping>

<servlet-name>FacesServlet</servlet-name>

<url-pattern>/guess/*</url-pattern>

</servlet-mapping>

Page 11: Java Server Faces

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

Page 12: Java Server Faces

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() {…}…

Page 13: Java Server Faces

Managed-bean (faces-config.xml)<managed-bean>   

<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>

Page 14: Java Server Faces

Strona JSF  <HTML xmlns="http://www.w3.org/1999/xhtml"xml:lang="en">  

<HEAD> <title>Hello</title> </HEAD>  

<%@ page contentType="application/xhtml+xml" %>

<%@ taglib uri="http://java.sun.com/jsf/html" prefix="h" %>

  <%@ taglib uri="http:.//java.sun.com/jsf/core" prefix="f" %>

<body>

<f:view>   

<h:form id="helloForm1">

 …

</h:form>

</f:view>

</body>

</HTML>

Page 15: Java Server Faces

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>

Page 16: Java Server Faces

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"/>

Page 17: Java Server Faces

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)

Page 18: Java Server Faces

Komunikaty o błędzie

Pliki *.properties

ApplicationMessages.properties

userNoConvert=The value you entered is not a number.

Page 19: Java Server Faces

Komunikaty o błędzie (faces-config)

<application>

<resource-bundle>

<base-name>

guessNumber.ApplicationMessages

</base-name>

<var>ErrMsg</var>

</resource-bundle>

</application>

Page 20: Java Server Faces

Komunikaty o błędzie

<h:inputText

id="userNo"

label="User Number"

value="#{UserNumberBean.userNumber}"

converterMessage="#{ErrMsg.userNoConvert}">

...

</h:inputText>

Page 21: Java Server Faces

Nawigacjafaces-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" />

Page 22: Java Server Faces

response.jspresponse.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.";

Page 23: Java Server Faces

Procedury obsługi zdarzeń

• ActionListener

• ValueChangeListener

Page 24: Java Server Faces

ActionListener

<h:commandButton actionListener=”#bean.sideEffect}”Immediate=„true”/>

public void sideEffect(ActionEvent event){

//np. aktywacja/deaktywacja innych //elementów formularza

Page 25: Java Server Faces

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();

Page 26: Java Server Faces

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>

Page 27: Java Server Faces

Internacjonalizacja

<f:loadBundle var=” customMessages” />

String current = event.getComponent().getId();

FacesContext context =FacesContext.getCurrentInstance();

context.getViewRoot() .setLocale((Locale) locales.get(current));

Page 28: Java Server Faces

Źródła

• http://java.sun.com/javaee/javaserverfaces/ - strona domowa

• http://java.sun.com/javaee/5/docs/tutorial/doc/index.html - tutorial

• http://wazniak.mimuw.edu.pl/index.php?title=AWWW-1st3.6-w11.tresc-1.0-toc – prezentacja o JSF