f:view - e

Transcription

f:view - e
JSF : Java Server Faces
Plan
Introduction
◆
Technologie
◆
Introduction
JSF introduction
■
Un standard Java EE (Java Community Process)
■
■
Java Specification Request : JSR-127
Une architecture basée sur des composants
Framework identique à Swing et AWT
■
Ensemble de composants standards
■
■
■
UI Components
Extensible
■
Possibilité de créer de nouveaux composants UI
Les technologies Java Web
JSF : pourquoi faire ?
■
■
Construction d'interfaces Web
Avantages
Séparation entre présentation et comportement
■
Contrôle au niveau composant
■
Composant UI avec état statefull
■
Événement facilement couplé au code côté
serveur
■
Associe les concepts connus d'événementiel et
d'application Web N tiers
■
Technologie côté serveur
Serveur Web
accès page
requête HTTP
mapage.jsp
Navigateur
réponse HTTP
rendu HTML
monUI
JSF et MVC 2
■
Respecte le modèle MVC 2
■
■
Mapping HTML/Objet
Plus simple que ses concurrents
Spring MVC
■
Struts
■
■
Plus riche
Listeners
■
Validators
■
Converters
■
Technologie
JSF technologie
■
Création dynamique d'interfaces graphiques
■
■
■
Notion de Renderer (support de différents clients)
Côté serveur
La technologie combine
Pages JSP
■
Composants graphiques événementiels
■
Observateurs d'événements (Contrôleurs)
■
Classes javaBean
■
Filtres de saisies (validité, changement de type)
■
JSF : protocole événementiel
Événement
FacesServlet
(contrôleur)
Page JSP
Composants UI
Réponse
(vues)
Observateur
d'événements
JavaBeans
(modèle)
Cycle de vie
■
Lorsque la page est exécutée
■
Un arbre d'objets Java est créé
■
Les objets de cet arbre
■
■
■
Transformation de l'arbre
■
Flux de rendu propre à la technologie du client
■
■
Courants : UIComponent
Racine : UIViewRoot
HTML, XHTML, WML, XML, …
A chaque soumission de vue
■
Reconstitution de l'arbre de composants
API JSF permet d'accéder à l'arbre
JSF : modèle MVC 2 (1)
■
Modèle
■
■
Vue
■
■
Composants JavaBean, POJO
Pages JSP avec composants UI
Contrôleur
■
Servlet : Faces Servlet
JSF : modèle MVC 2 (2)
■
Actions
Listeners (observateur d'événements)
■
Classes d'action (ManagedBean)
■
■
Filtres
Validators
■
Converters
■
JSF : configuration
■
Fichiers
■
web.xml
■
Déclaration du contrôleur principal
■
■
Faces Servlet
faces-config.xml
■
Déclaration des règles de navigation
■
■
■
■
Statiques ou dynamiques
Déclaration des javaBeans gérés
Déclaration des validators construits
Déclaration des converters construits
Composants UI
■
Intégrés dans les pages JSP
■
■
Standards
■
■
Par des custom tags spécifiques
Ils représentent tous les objets HTML
Construits
Il est possible de développer ses propres UI
■
Offerts par des éditeurs
■
■
ADF Oracle, MyFaces, ICEfaces, JBoss, ...
Libraires UI
■
Déclarées dans chaque page JSP
<%@ taglib uri="http://java.sun.com/jsf/html" prefix="h" %> <
%@ taglib uri="http://java.sun.com/jsf/core" prefix="f" %>
■
UI déclarés dans une section <f:view>
<f:view>
<h:form id="calcForm">
...
</h:form>
</f:view>
Les UI
■
Les UI statiques (objets HTML)
Ils sont déclarés après le tag <h: ...>
■
Ils peuvent posséder une identité
■
■
■
Attribut id=''identifiant''
Les UI dynamiques (contrôle, validation,
convertion, ...)
■
Ils sont déclarés après le tag <f: ...>
UI Composants
■
Libellés
■
■
Zones de saisie
■
■
<h:inputText>, <h:inputHidden>, <h:inputSecret>
Zones d'affichage
■
■
<h:outputLabel>
<h:outputText>
Messages
■
<h:message>
UI Messages
■
Message pour un UI
<h:message>
■
Attribut for=''Id du composant''
■
■
Messages pour plusieurs UI
■
■
<h:messages>
Attributs de présentation
■
Style CSS
UI Composites
■
Panneaux de type tableau
■
■
<h:panelGrid columns=''3''>
Panneaux ensemble de composants
■
<h:panelGroup>
UI de sélection (1)
■
Listes de sélection
<h:selectOneListbox>
■
<h:selectManyListbox>
■
■
Menus de sélection
<h:selectOneMenu>
■
<h:selectManyMenu>
■
UI de sélection (2)
■
Radio bouton
■
■
<h:selectOneRadio>
Boites à cocher
<h:selectBooleanCheckbox>
■
<h:selectManyChekbox>
■
UI Tableau de données
■
Déclaration
■
■
Grand nombre d'attributs
■
■
<h:dataTable>
Richesse de présentation
Attributs de comportement
■
Richesse fonctionnelle
UI Lien (1)
■
Déclaration du lien
■
■
Libellé du lien
■
■
<f:verbatim>libellé</f:verbatim>
Action
■
■
<h:commandLink>
Attribut action=''#{bean.methode}''
Listener
Attribut actionListener=''#{listener.methode}''
■
Méthode void methode(ActionEvent)
■
UI Lien (2)
■
Lien sur une image
■
■
<h:graphicImage>
Exemple
■
<h:graphicImage value=''/image.png'' />
UI Bouton
■
Déclaration du bouton
■
■
Libellé du bouton
■
■
Attribut value=''libellé''
Action
■
■
<h:commandButton>
Attribut action=''#{bean.methode}''
Listener
Attribut actionListener=''#{listener.methode}''
■
Méthode void methode(ActionEvent)
■
JSF exemple
Bonjour Le Monde
<%@ page contentType="text/html" %>
<%@ taglib uri="http://java.sun.com/jsf/html" prefix="html" %>
<%@ taglib uri="http://java.sun.com/jsf/core" prefix="core" %>
<core:view>
<html:outputText value="Bonjour le Monde ! (en JSF !)" />
</core:view>
Anatomie de la page
<%@ page contentType="text/html" %>
Type de contenu : HTML
<%@ taglib uri="http://java.sun.com/jsf/html" prefix="html" %> Import des taglibs de
<%@ taglib uri="http://java.sun.com/jsf/core" prefix="core" %> base de JSF (requis)
<core:view>
Définit une vue JSF (requis)
<html:outputText value="Bonjour le Monde ! (en JSF !)" />
Tag outputText
Intégration avec JSP
JSP avec composants UI (1)
■
Pour utiliser les «custom tag» JSF
<%@ taglib uri="http://java.sun.com/jsf/html" prefix="h" %>
<%@ taglib uri="http://java.sun.com/jsf/core" prefix="f" %>
JSP avec composants UI (2)
■
Section JSF au sein de la page JSP
<body bgcolor="#FFFFFF">
<f:view>
VUE JSF
</f:view>
...
</body>
...
JSP avec composants UI (3)
■
Formulaire JSF
<h:form id="loginForm">
....
</h:form>
JSP avec composants UI (4)
■
Composant de type TextField JSF
<h:inputText id="userid" size="15" required="true"
value="#{LoginServer.userid}" >
JSP avec composants UI (5)
■
TextField JSF avec validation
<h:inputText id="userid" size="15" required="true"
value="#{LoginServer.userid}" >
<f:validate_length minimum="4" maximum="7" />
</h:input_text>
<h:messages id="errors1" for="userid"/>
JSP avec composants UI (6)
■
Bouton JSF
<h:command_button id="submit"
action="#{LoginServer.loginAction}"
value="#{jsfloginBundle.loginSubmitLabel}">
</h:command_button>
Référence à des ressources
■
Permet l'internationalisation
<f:loadBundle basename="jsflogin.Resources"
var="jsfloginBundle"/>
Navigation
■
JSF implémente un automate à états
finis
A l'aide de règles de navigation
■ Avec une clef de navigation (outcome)
■
■
Statique
■
■
En dur dans la page JSP
Dynamique
■
Calculée par un EL JSF (Expression Language)
Navigation
■
Décrite dans faces-config.xml
■
Au sein de sections <navigation-rule>
■
■
<from-view-id> // page de départ
Conditions dans <navigation-case>
■
■
■
<from-action-ref>
// méthode de classe action
<from-outcome>
// valeur de sortie de l'action
<to-view-id>
// page d'arrivée
Navigation statique
<%@ page contentType="text/html" %>
<%@ taglib uri="http://java.sun.com/jsf/html" prefix="html" %>
<%@ taglib uri="http://java.sun.com/jsf/core" prefix="core" %>
<core:view>
<html:form>
<html:commandLink action="coucou" value="Bonjour le Monde"/>
</html:form>
</core:view>
Définition statique
...
<navigation-rule>
<!-- Indique pour quelle vue courante la règle s'applique →
<from-view-id>/index.jsp</from-view-id>
<navigation-case>
<!-- Si l'outcome renvoyé est coucou alors JSF passe à la page /bonjour.jsp -->
<from-outcome>coucou</from-outcome>
<to-view-id>/bonjour.jsp</to-view-id>
</navigation-case>
</navigation-rule>
</faces-config>
Navigation dynamique
...
<navigation-rule>
<from-view-id>/login.jsp</from-view-id>
<navigation-case>
<description>cas d'un login avec succes</description>
<from-action>#{LoginServer.loginAction}</from-action>
<from-outcome>success</from-outcome>
<to-view-id>/success.jsp</to-view-id>
</navigation-case>
...
</faces-config>
Exemple de classe Action
public class LoginServer extends Object
{
...
public String loginAction()
{
if ( userid.equals("scott") && password.equals("tiger") )
{
System.out.println("returning success");
return "success";
}
else
{
System.out.println("returning failure");
return "failure";
}
...
Les classes Listener
■
Invocation
Action Listener=''#{actionlistener}
■
La classe doit implémenter
L'interface ActionListener
La méthode
public void processAction(ActionEvent event)
Possibilités
Accès à l'état des composants UI
Accès aux objets associés au composant
qui a déclenché l'événement
public class FormePersonneListener implements ActionListener {
public void processAction(ActionEvent event) throws AbortProcessingException
{
FacesContext context = FacesContext.getCurrentInstance();
UIComponent component = event.getComponent();
if (component.getId().equals("submit")) {
Application application = FacesContext.getCurrentInstance().getApplication();
PersonneBean bean = (PersonneBean) application.getVariableResolver().resolveVariable(context,"leBean");
bean.setStatut(true);
}
}
Accès aux attributs
■
JSF accède aux getter/setter par réflexion
Appel aux méthodes get
Sur les composants de sortie d'information
Exemple : <h:outputText
Appel aux méthode set
Sur les composants d'entrée d'information
Exemple : <h:inputText
Système de nommage
#{ManagedBean.attribut}
#{ManagedBean.attribut.attribut}
Déclaration des Java Bean
■
Dans le fichier faces-config.xml
...
<managed-bean>
<managed-bean-name>LoginServer</managed-bean-name>
<managed-bean-class>jsflogin.loginServer</managed-bean-class>
<managed-bean-scope>session</managed-bean-scope>
</managed-bean>
</faces-config>
Exemple de modèle
Exemple de faces-config
<managed-bean>
<managed-bean-name>AdresseBean</managed-bean-name>
<managed-bean-class>modele.Adresse</managed-bean-class>
<managed-bean-scope>session</managed-bean-scope>
</managed-bean>
<managed-bean>
<managed-bean-name>EtudiantBean</managed-bean-name>
<managed-bean-class>modele.Etudiant</managed-bean-class>
<managed-bean-scope>session</managed-bean-scope>
<managed-property>
<property-name>adresse</property-name>
<property-class>modele.Adresse</property-class>
<value>#{AdresseBean}</value>
</managed-bean>
Exemple de page
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr">
<head> <title>Etudiant</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 bgcolor="white">
<f:view>
<h:form id="etudiantForm" >
<h:inputText value="#{EtudiantBean.nom}"/>
<h:inputText value="#{EtudiantBean.adresse.ville}"/>
<h:commandButton id="submit" action="succes" value="Valider"/>
</h:form>
</f:view>
</body>
</html>
Fichiers de configuration
Fichiers de déploiement
■
Le fichier faces-config.xml
–
–
–
■
Le fichier web.xml
–
■
Déclaration des ManagedBean
Déclaration des règles de navigation
Déclaration des classes de validation
Déclaration de la Faces Servlet
Dans le répertoire WEB-INF/
Déclaration de Servlet Faces
■
Dans le fichier web.xml
<servlet>
<servlet-name>Faces Servlet</servlet-name>
<servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
<load-on-startup> 1 </load-on-startup>
</servlet>
<!-- Faces Servlet Mapping -->
<servlet-mapping>
<servlet-name>Faces Servlet</servlet-name>
<url-pattern>/faces/*</url-pattern>
</servlet-mapping>
Déclaration de faces-config.xml
■
Dans le fichier web.xml
<context-param>
<param-name>javax.faces.application.CONFIG_FILES</param-name>
<param-value>/WEB-INF/faces-config.xml</param-value>
</context-param>
Stockage de l'état de la page
■
Dans le fichier web.xml
<context-param>
<param-name>javax.faces.STATE_SAVING_METHOD</param-name>
<param-value>client</param-value>
</context-param>
Valeurs possibles : client (champ caché dans la page) ou server
Conclusion
Conclusion
■
■
■
■
■
■
Framework standardisé
Respecte le MVC2
Logique de programmation événementielle
Extensible
Meilleure intégration des JavaBeans
Bientôt des GUI Builder JSF
Vendeurs
■
Implémentation de référence
■
■
SUN MICROSYSTEM
Communautés libres et Open Source
MyFaces [Consortium Apache]
■ ICEFaces [ICEfaces.org]
■
■
Extensions
Librairie ADF Faces Components [Oracle]
■ Librairie RichFaces [JBoss ]
■
Bibliographie
●
●
●
●
Livres
Java Server Faces
■
Éditeur: Prentice Hall
■
Auteurs: David M. Geary, Cay S. Horstmann
Java Server Faces Programming
■
Éditeur: Mc Graw Hill
■
Auteurs: Budi Kurniawan
Sites Web
■ http://java.sun.com/j2ee/javaserverfaces
■
http://www.jsfcentral.com/

Documents pareils