Java Server Faces

Post on 22-Jan-2016

37 views 1 download

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

Java Server Faces

Tomasz Nowak

Konspekt

1. Historia

2. Wstęp

3. Architektura JSF

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

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

• Biblioteki znaczników do opisu interfejsu użytkownika

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

Przykład – greeting.jsp

Przykład – greeting.jsp

Przykład – response.jsp

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>

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

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

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>

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>

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>

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

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)

Komunikaty o błędzie

Pliki *.properties

ApplicationMessages.properties

userNoConvert=The value you entered is not a number.

Komunikaty o błędzie (faces-config)

<application>

<resource-bundle>

<base-name>

guessNumber.ApplicationMessages

</base-name>

<var>ErrMsg</var>

</resource-bundle>

</application>

Komunikaty o błędzie

<h:inputText

id="userNo"

label="User Number"

value="#{UserNumberBean.userNumber}"

converterMessage="#{ErrMsg.userNoConvert}">

...

</h:inputText>

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

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

Procedury obsługi zdarzeń

• ActionListener

• ValueChangeListener

ActionListener

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

public void sideEffect(ActionEvent event){

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

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

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>

Internacjonalizacja

<f:loadBundle var=” customMessages” />

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

FacesContext context =FacesContext.getCurrentInstance();

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

Ź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