Outils pour utilisateurs

Outils du site


helloworld:web:java:taglib:jsf

Ceci est une ancienne révision du document !


Nécessite un projet de type Dynamic Web Project avec les JSF activés.

faces-config.xml
<?xml version="1.0" encoding="UTF-8"?>
<faces-config xmlns="http://xmlns.jcp.org/xml/ns/javaee"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-facesconfig_2_2.xsd"
  version="2.2">
  <component>
    <description>Une partie du rendu de ce composant est délégué à un Renderer</description>
    <display-name>Composant Heure Courante avec Renderer spécifique</display-name>
    <component-type>monHtmlHeureCourante</component-type>
    <component-class>com.llgc.TagHeureHtml</component-class>
  </component>
  <render-kit>
    <renderer>
      <display-name>Heure courante avec Renderer</display-name>
      <component-family>heureCourante</component-family>
      <renderer-type>heureAvecRenderer</renderer-type>
      <renderer-class>com.llgc.TagHeureRenderer</renderer-class>
    </renderer>
  </render-kit>
</faces-config>
TagHeure.java
package com.llgc;
 
import javax.faces.component.UIComponent;
import javax.faces.webapp.UIComponentELTag;
 
// Le nom de cette classe correspond avec celui défini dans le fichier tld, rubrique tag-class.
public class TagHeure extends UIComponentELTag
{
  private String label;
 
  public String getLabel ()
  {
    return label;
  }
 
  public void setLabel (String label)
  {
    this.label = label;
  }
 
  @Override
  public String getComponentType ()
  {
    // Le nom du type du composant correspond avec celui défini dans le fichier faces-config.xml,
    // rubrique component|component-type
    return "monHtmlHeureCourante";
  }
 
  @Override
  public String getRendererType ()
  {
    // Le nom du rendu du composant correspond avec celui défini dans le fichier faces-config.xml,
    // rubrique render-kit|renderer|renderer-type
    return "heureAvecRenderer";
  }
 
  @Override
  protected void setProperties (UIComponent composant)
  {
    composant.getAttributes().put("label", label);
    super.setProperties (composant);
  }
 
}
TagHeureRenderer.java
package com.llgc;
 
import java.io.IOException;
import java.util.Calendar;
 
import javax.faces.component.UIComponent;
import javax.faces.context.FacesContext;
import javax.faces.context.ResponseWriter;
import javax.faces.render.Renderer;
 
public class TagHeureRenderer extends Renderer
{
  @Override
  public void encodeBegin (FacesContext context, UIComponent component) throws IOException
  {
    Calendar calendrier = Calendar.getInstance ();
    String intitule = (String) component.getAttributes ().get ("label");
    String heureCourante = calendrier.get (Calendar.HOUR) + ":" + calendrier.get (Calendar.MINUTE) + ":"
        + calendrier.get (Calendar.SECOND);
    ResponseWriter out = context.getResponseWriter ();
    out.write ("<table border=\"1\"><tr bgcolor=\"yellow\"><td><font color=\"red\">" + intitule + ":" + heureCourante
        + "</font></td></tr></table>");
    super.encodeBegin (context, component);
  }
}
TagHeureHtml.java
package com.llgc;
 
import java.io.IOException;
 
import javax.faces.component.html.HtmlOutputText;
import javax.faces.context.FacesContext;
import javax.faces.context.ResponseWriter;
 
public class TagHeureHtml extends HtmlOutputText
{
 
  @Override
  public String getFamily ()
  {
    // Le nom du rendu du composant correspond avec celui défini dans le fichier faces-config.xml,
    // rubrique render-kit|renderer|component-family
    return "heureCourante";
  }
 
  @Override
  public void encodeEnd (FacesContext context) throws IOException
  {
    ResponseWriter out = context.getResponseWriter ();
    out.write ("</b>");
    super.encodeEnd (context);
  }
}
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">
  <context-param>
    <param-name>javax.faces.FACELETS_LIBRARIES</param-name>
    <param-value>/WEB-INF/tagheure.taglib.xml</param-value>
  </context-param>
</web-app>
tagheure.taglib.xml
<?xml version="1.0" encoding="UTF-8"?>
<javaee:facelet-taglib version="2.0"
  xmlns:javaee="http://java.sun.com/xml/ns/javaee" xmlns:xml="http://www.w3.org/XML/1998/namespace"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-facelettaglibrary_2_0.xsd ">
  <javaee:namespace>http://llgc.org</javaee:namespace>
  <javaee:tag>
    <javaee:tag-name>heure</javaee:tag-name>
    <javaee:component>
      <javaee:component-type>monHtmlHeureCourante</javaee:component-type>
      <javaee:renderer-type>heureAvecRenderer</javaee:renderer-type>
    </javaee:component>
  </javaee:tag>
</javaee:facelet-taglib>
taglib.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"
  xmlns:ui="http://java.sun.com/jsf/facelets" xmlns:tag="http://llgc.org">
<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>
      <tag:heure label="test" />
    </p>
  </h:body>
</f:view>
</html>

Rendu : Rendu exemple 2

helloworld/web/java/taglib/jsf.1439499387.txt.gz · Dernière modification : 2015/08/13 22:56 de root