Java Server Faces
Úvod
Java Server Faces je rámec postavený přímo na Servlet API. Může používat JSP, ale nemusí. Pokud používá JSP, jsou k dispozici dvě knihovny JSP značek.
Stránky jsou skládány z komponent. Jedna komponenta může mít více různých rendererů, např. pro HTML, pro XHTML, pro WAP/WML, nebo i různé varianty v rámci HTML. Standardně je k dispozici základní sada komponent a renderery do HTML.
Např. komponenta UICommand
se může zobrazit
- jako hyperlink pomocí značky
<h:commandLink>
- jako tlačítko pomocí značky
<h:commandButton>
Nevýhodou implementací JSF je, že renderery pro HTML si často vypomáhají JavaScriptem, a aplikace tak nebudou fungovat v prohlížečích, které mají JavaScript vypnutý.
Implementace JSF má předpřipravené komponenty pro běžné prvky - hyperlinky, tlačítka, editovatelná pole, výběry se seznamů, zobrazení seznamu chyb atd.
Konfigurace JSF aplikace
Celá JSF aplikace se konfiguruje pomocí souboru /WEB-INF/faces-config.xml
.
Stav komponent a stránek se pamatuje pomocí tzv. managed JavaBeans, které se musí popsat v konfiguračním souboru. K jejich properties se pak dá přistupovat pomocí výrazů jazyka EL.
//faces-config.xml <managed-bean> <description> The backing bean that backs up the guessNumber Web application </description> <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> <managed-property> <property-name>maximum</property-name> <property-class>long</property-class> <value>10</value> </managed-property> </managed-bean>
Ve verzi JavaEE 5.0 byl sjednocen JSTL EL a JSF EL do jednoho Unified EL jazyka:
- výrazy
${neco}
označují výrazy pro čtení vyhodnocované při zobrazení JSP stránky - výrazy
#{neco}
označují výrazy pro čtení i zápis
K vše uvedenému managed JavaBeanu můžete tedy přistupovat např. pomocí
<%@ page contentType="text/html; charset=utf-8" %> <%@ taglib uri="http://java.sun.com/jsf/html" prefix="h" %> <%@ taglib uri="http://java.sun.com/jsf/core" prefix="f" %> <body bgcolor="white"> <f:view> <h:form id="mujForm" > max: <h:outputText value="#{UserNumberBean.maximum}"/> <br> min: <h:outputText value="#{UserNumberBean.minimum}"/> <br> Novy max: <h:inputText id="newMax" value="#{UserNumberBean.maximum}" > </h:inputText><br> Novy min: <h:inputText id="newMin" value="#{UserNumberBean.minimum}" > </h:inputText><br> <h:commandButton id="submit" action="success" value="Submit" /> </h:form> </f:view> </body>
Data jsou ve dvou formách - ve tvaru pro model, např. integer, a ve tvaru pro prezentaci, typicky řetězce. JSF zajišťuje konverze mezi těmito dvěma tvary.
Navigace mezi stránkami se konfiguruje opět ve /WEB-INF/faces-config.xml
.
<navigation-rule> <from-view-id>/moje.jsp</from-view-id> <navigation-case> <from-outcome>dobre</from-outcome> <to-view-id>/dobre.jsp</to-view-id> </navigation-case> <navigation-case> <from-outcome>spatne</from-outcome> <to-view-id>/spatne.jsp</to-view-id> </navigation-case> </navigation-rule>
Ve stránce pak lze specifikovat, že výstup z akce poskytuje určité metoda:
<h:commandButton id="submit" action="#{mujManagedBean.jakDopadlo}" value="Submit" />
a metoda musí vracet jeden z očekávaných řetězců:
public String jakDopadlo() { if(...) return "dobre"; else return "spatne"; }
Události
Události jsou tří typů:
- action events způsobované uživatelem, když klikne na hyperlink nebo odešle formulář
- value-change events způsobované změnami hodnot
- data-model event způsobované přidáním řádku do tabulky dat