Outils pour utilisateurs

Outils du site


helloworld:web:java:jsf

Ceci est une ancienne révision du document !


Une page JSF avec l'utilisation des EL utilise du code HTML dans lequel est mis des tags définis par les spécifications des JSF. Ce sont ces tags qui appellent les fonctions Java.

<note>Avec JSF, les EL s'utilisent avec le symbole #.</note>

<note>Tous les exemples ci-dessous utilisent le BeanPersonne.</note>

Cycle de vie

Création du projet

Nécessite un projet de type Dynamic Web Project.

Exemple 1 - La base

index.xhtml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
  xmlns:h="http://java.sun.com/jsf/html">
<h:head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>Insert title here</title>
</h:head>
<h:body>
  <p>
    <h:outputText value="15 est un nombre pair." rendered="#{15 % 2 == 0}" />
    <h:outputText value="15 est un nombre impair." rendered="#{15 % 2 == 1}" />
    <br />
    <h:outputText value="16 est un nombre pair." rendered="#{16 % 2 == 0}" />
    <h:outputText value="16 est un nombre impair." rendered="#{16 % 2 != 0}" />
  </p>
</h:body>
</html>

Rendu

15 est un nombre impair. 
16 est un nombre pair.

Exemple 2 - Utilisation d'un Bean

<note important>Dans le cas de Beans utilisés par JSF, la valeur par défaut définie lors de la définition de l'attribut ou par le constructeur est initialisé à 0 (pourquoi ????). Il est donc nécessaire de définir une fonction init avec l'annotation @PostConstruct.</note>

L'exemple est présenté ici afin de garder une cohérence avec les autres pages (servlet, JSP et JSP+JSTL). Cependant, il n'est pas possible de définir dans JSF la valeur d'attribut sans intervention de l'utilisateur.

<note important>Il est indispensable que le nom de la classe définissant le Bean managé commence par une majuscule. En effet, lorsqu'on désignera la classe, il faudra taper com.llgc.BeanPersonne mais si l'on soit désigner la référence à un attribut, il faudra taper beanPersonne.taille avec une minuscule.</note>

index2.xhtml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
  xmlns:h="http://java.sun.com/jsf/html"
  xmlns:f="http://java.sun.com/jsf/core">
<f:view>
<head>
  <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
  <title>Insert title here</title>
</head>
<body>
  <p>
    La personne possède une taille de #{beanPersonne.taille} cm et
    <h:outputText value="a" rendered="#{beanPersonne.yeuxBleus}"/>
    <f:subview rendered="#{!beanPersonne.yeuxBleus}">n'a pas</f:subview>
    les yeux bleus.
  </p>
</body>
</f:view>
</html>

Code à ajouter au BeanPersonne :

  @PostConstruct
  public void init ()
  {
    setTaille (150);
    setYeuxBleus (true);
    setDiplomes (null);
  }

Rendu :

La personne possède une taille de 150 cm et a les yeux bleus.

Exemple 3 - Formulaire avec Bean global et session

index3.xhtml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
  xmlns:h="http://java.sun.com/jsf/html"
  xmlns:f="http://java.sun.com/jsf/core">
<f:view>
  <h:head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
    <title>Insert title here</title>
  </h:head>
  <h:body>
    <p>
      <h:outputText value="Valeur en cours de la taille : #{beanPersonne.taille}" />
    </p>
    <h:form>
      <span class="label_nav"><h:outputLabel value="taille" /></span>
      <h:inputText id="taille" required="true" value="#{beanPersonne.taille}" />
      <h:commandButton value="Validation" id="button" action="#{index3Action.action}" />
    </h:form>
    <h:message for="taille" style="color:red" />
  </h:body>
</f:view>
</html>

<note>La valeur retour de la méthode action définie la page de redirection.</note>

Index3Action.java
package com.llgc;
 
import javax.faces.bean.ManagedBean;
 
@ManagedBean
public class Index3Action
{
  public String action ()
  {
    return "Servlet3";
  }
}

Rendu du formulaire : Rendu du formulaire

Rendu de la réponse : Rendu de la réponse

Exemple 4 - context-param et init-param

Ajout de trois context-param.

web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xmlns="http://xmlns.jcp.org/xml/ns/javaee"
  xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
  version="3.1">
  <display-name>EL</display-name>
  <servlet>
    <servlet-name>Faces Servlet</servlet-name>
    <servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
  </servlet>
  <context-param>
    <param-name>user</param-name>
    <param-value>utilisateur</param-value>
  </context-param>
  <context-param>
    <param-name>password</param-name>
    <param-value>mot de passe</param-value>
  </context-param>
  <context-param>
    <param-name>driver</param-name>
    <param-value>com.mysql.jdbc.Driver</param-value>
  </context-param>
  <servlet-mapping>
    <servlet-name>Faces Servlet</servlet-name>
    <url-pattern>/faces/*</url-pattern>
  </servlet-mapping></web-app>
index4.xhtml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
  xmlns:h="http://java.sun.com/jsf/html"
  xmlns:f="http://java.sun.com/jsf/core">
<f:view>
<h:head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>Insert title here</title>
</h:head>
<h:body>
  <p>
    nom : ${initParam['user']}<br />
    pass : ${initParam['password']}<br />
    driver : ${initParam['driver']}<br />
  </p>
</h:body>
</f:view>
</html>

<note warning>Les init-param ne sont plus du tout accessibles en JSF, ce qui démontre bien la volonté de séparer la représentation visuelle (.xhtml) des servlets.</note>

Rendu :

nom : utilisateur
pass : mot de passe
driver : com.mysql.jdbc.Driver
helloworld/web/java/jsf.1439128251.txt.gz · Dernière modification : 2015/08/09 15:50 de root