LPRO CMSII Olivier FLAUZAC

publicité
Java Server
Faces
LPRO CMSII
Olivier FLAUZAC
[email protected]
http://cosy.univ-reims.fr/flauzac
1
lundi 5 décembre 11
Plan
• Présentation
• Managed Bean
• Génération de composants et
navigation
2
lundi 5 décembre 11
Présentation
3
lundi 5 décembre 11
JSF ?
• Java Server Faces
• Conception dirigées par :
• les composants
• les événements
• les beans gérés
• les interactions
• Conception non dirigée par :
• les requêtes
• les réponses
4
lundi 5 décembre 11
Objectifs
• Simplifier le développement
• Accélérer la conception
• Offrir un ensemble de composants
graphiques :
• listes
• zones de textes
• composants
• Mise en place d’une approche RAD
5
lundi 5 décembre 11
Architecture
• Intégration des techniques de visualisation
• Construction des pages selon des templates
6
lundi 5 décembre 11
Cycle de vie
7
lundi 5 décembre 11
Moteur de rendu
Faces Servlet
Fonctionnement
XHTML
composant
composant
composant
bean géré
configuration
8
lundi 5 décembre 11
convertisseur
validateur
Facesservlet
• Servlet «système»
• Instancié par le système
• Gestion des requêtes
• Intégration dans la configuration (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>
<servlet-mapping>
<servlet-name>Faces Servlet</servlet-name>
<url-pattern>/faces/*</url-pattern>
</servlet-mapping>
9
lundi 5 décembre 11
TECHNOLOGIES
CONNEXES
• Convertisseurs
• assure la conversion des chaînes issus des formulaires
vers d’autres données :
• String -> int
• String -> float
• ...
• Validateurs
• valide les données entrées dans les formulaires
• Bean Gérés
• données instanciées par le système
10
lundi 5 décembre 11
Managed Bean
11
lundi 5 décembre 11
Managed bean
• Bean java instanciés par le système
• intégré dans la configuration
• géré par le moteur
• associé à une portée
• Accessible dans sa portée par une expression
EL
• Assure le modèle de l’application
• Lié aux tags des facelets
12
lundi 5 décembre 11
Exemple
le Managed Bean
package MB;
import javax.inject.Named;
import javax.enterprise.context.SessionScoped;
import java.io.Serializable;
@Named(value = "hello")
@SessionScoped
public class Hello implements Serializable {
private String s;
public Hello() {
s = "Salut les amis";
}
String getS() {
return s;
}
public void setS(String s) {
this.s = s;
}
}
13
lundi 5 décembre 11
Le JSF associé
<?xml version='1.0' encoding='UTF-8' ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://java.sun.com/jsf/html">
<h:head>
<title>Facelet Title</title>
</h:head>
<h:body>
Le bean géré dit : #{hello.s}
</h:body>
</html>
14
lundi 5 décembre 11
Structure des
managed Bean
• Structure simple
• types de bases
• constructeur par défaut
• setter / getter
• Composition
• composition d’objets
• nécessité de construire les objets composés
• setter / getter de l’objet et de ses objets composés
15
lundi 5 décembre 11
Managed Bean complexe
• Bean Utilisateur
• nom , prénom , adresse
• panier
• préférences
• ...
16
lundi 5 décembre 11
Génération de
composants et
navigation
17
lundi 5 décembre 11
Création de JSF
• Utilisation de tags spécifiques (facelets)
• Tag :
• aspect graphique
• traitement associé
• Utilisation des EL
• Vers un code sans HTML
• Génération possible de HTML, XUL ...
18
lundi 5 décembre 11
Bibliothèques de tag
Bibliothèque
JSF HTML Tag
Bibliothèque
http://java.sun.com/jsf/html
prefix
Contenu
h:
composants html
actions
personnalisées
JSF Core Tag
http://java.sun.com/jsf/core
f:
JSTL Core tag
lib
http://java.sun.com/jsp/jstl/core
c:
JSTL function
tag lib
http://java.sun.com/jsp/jstl/functions
19
lundi 5 décembre 11
fn:
Exemples
<h:outputLink value="http://www.google.Fr"> vers google </h:outputlink>
<h:graphicImage id="monImage" url="fichierIMage"/>
<h:outputLabel value="Salut les amis"/>
20
lundi 5 décembre 11
Le cas des actions de
formulaires
• Possibilité de définir dans le tag l’action
sur un bean
• exécution d’une méthode d’un bean
• appel à un setter
• Définition de la navigation
• dans le tag
• dans l’action du bean
21
lundi 5 décembre 11
Une simple navigation
Ajout à Hello.java
public String deplacement(){
s = "Hello les copains";
return "icietla";
}
Ajout au fichier xhtml
<h:commandButton value="hop" action="#{hello.deplacement}"/>
22
lundi 5 décembre 11
Une simple navigation :
la destination
icietla.xhtml
...
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://java.sun.com/jsf/html">
<h:head>
</h:head>
<h:outputLabel value="#{hello.s}":>
</h:body>
</html>
...
23
lundi 5 décembre 11
Accès aux éléments
Le bean personne
@Named(value = "personne")
@SessionScoped
public class Personne implements Serializable {
private String nom;
private String prenom;
private int naissance;
public Personne() {
this.nom = null;
this.prenom = null;
this.naissance = 0;
}
public String getNom() {
return nom;
}
public void setNom(String nom) {
this.nom = nom;
}
public String getPrenom() {
return prenom;
}
public void setPrenom(String prenom) {
this.prenom = prenom;
}
public int getNaissance() {
return naissance;
}
public void setNaissance(int naissance) {
this.naissance = naissance;
}
}
24
lundi 5 décembre 11
Accès aux éléments
Le formulaire
<h:form>
<h:inputText value="#{personne.nom}"/>
<h:inputText value="#{personne.prenom}"/>
<h:inputText value="#{personne.naissance}"/>
<h:commandButton value="hop" action="affich"/>
</h:form>
• Utilisation implicite d’un convertisseur :
• String --> int pour naissance
• Convertisseurs de types élémentaires
25
lundi 5 décembre 11
Accès aux éléments
affich.xhtml
<ul>
<li> #{personne.nom} </li>
<li> #{personne.prenom} </li>
<li> #{personne.naissance} </li>
</ul>
26
lundi 5 décembre 11
Actions
• Accès aux propriétés des bean
• Invocation de méthodes d’EJB
• Invocation de Web Services
• Accès à des données :
• bases de données
• fichiers
• annuaires
27
lundi 5 décembre 11
Validation
• Possibilité de définir les règles de validation dans la déclaration
• champ obligatoire
• fourchette de valeur
• ...
<h:form>
<h:inputText label="nom" value="#{personne.nom}" required="true"/>
<h:inputText label="prénom" value="#{personne.prenom}" required="true"/>
<h:inputText label="Date de naissance" value="#{personne.naissance}" required="true">
<f:validateLongRange maximum="2011" minimum="1900"/>
</h:inputText>
<h:commandButton value="hop" action="affich"/>
</h:form>
28
lundi 5 décembre 11
Téléchargement