Outils pour utilisateurs

Outils du site


helloworld:web:java:taglib:jsp

Ceci est une ancienne révision du document !


Nécessite un projet de type Dynamic Web Project.

JSP pur

tagperso.tld
<?xml version="1.0" encoding="UTF-8"?>
<javaee:taglib version="2.1" 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-jsptaglibrary_2_1.xsd ">
  <javaee:tlib-version>2.1</javaee:tlib-version>
  <javaee:short-name>tagperso</javaee:short-name>
  <javaee:tag>
    <javaee:name>nomtag</javaee:name>
    <javaee:tag-class>com.llgc.TagPerso</javaee:tag-class>
    <javaee:body-content>JSP</javaee:body-content>
    <javaee:attribute>
      <javaee:name>attribute1</javaee:name>
      <javaee:required>true</javaee:required>
      <javaee:rtexprvalue>true</javaee:rtexprvalue>
    </javaee:attribute>
    <javaee:attribute>
      <javaee:name>attribute2</javaee:name>
      <javaee:rtexprvalue>true</javaee:rtexprvalue>
    </javaee:attribute>
  </javaee:tag>
</javaee:taglib>

<note>rtexprvalue permet l'utilisation des EL dans les attributs.</note>

TagPerso.java
package com.llgc;
 
import java.io.IOException;
 
import javax.servlet.jsp.JspException;
import javax.servlet.jsp.JspWriter;
import javax.servlet.jsp.tagext.TagSupport;
 
@SuppressWarnings ("serial")
public class TagPerso extends TagSupport
{
  private String attribute1;
  private String attribute2;
 
  public String getAttribute1 ()
  {
    return attribute1;
  }
 
  public void setAttribute1 (String attribute1)
  {
    this.attribute1 = attribute1;
  }
 
  public String getAttribute2 ()
  {
    return attribute2;
  }
 
  public void setAttribute2 (String attribute2)
  {
    this.attribute2 = attribute2;
  }
 
  @Override
  public int doEndTag () throws JspException
  {
    try
    {
      JspWriter out = pageContext.getOut ();
      out.println (".");
    }
    catch (IOException e)
    {
      e.printStackTrace ();
      throw new JspException (e);
    }
    return EVAL_PAGE;
  }
 
  @Override
  public int doStartTag () throws JspException
  {
    JspWriter out = pageContext.getOut ();
    try
    {
      out.println ("Bonjour, les attributs valent " + attribute1 + " et " + attribute2 + ".<br />");
      out.println ("Le corps du message : ");
    }
    catch (IOException e)
    {
      e.printStackTrace ();
      throw new JspException (e);
    }
    return EVAL_BODY_INCLUDE;
  }
}
taglib.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
  pageEncoding="UTF-8"%>
<%@ taglib uri="WEB-INF/tagperso.tld" prefix="tag"%>
 
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
  <p>
    <tag:nomtag attribute1="attr1">Corps</tag:nomtag>
  </p>
</body>
</html>

Rendu :

Bonjour, les attributs valent attr1 et null.
Le corps du message : Corps.

JSP/JSF

Sur le principe, il ne faut pas mélanger les JSP et JSF mais j'ai mis trop de temps à faire marcher cet exemple pour le perdre.

Il faut un projet dynamique avec le support des JSF mais la page est générée depuis une JSP.

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);
  }
}
TagPerso.java
package com.llgc;
 
import java.io.IOException;
 
import javax.servlet.jsp.JspException;
import javax.servlet.jsp.JspWriter;
import javax.servlet.jsp.tagext.TagSupport;
 
@SuppressWarnings ("serial")
public class TagPerso extends TagSupport
{
  private String attribute1;
  private String attribute2;
 
  public String getAttribute1 ()
  {
    return attribute1;
  }
 
  public void setAttribute1 (String attribute1)
  {
    this.attribute1 = attribute1;
  }
 
  public String getAttribute2 ()
  {
    return attribute2;
  }
 
  public void setAttribute2 (String attribute2)
  {
    this.attribute2 = attribute2;
  }
 
  @Override
  public int doEndTag () throws JspException
  {
    try
    {
      JspWriter out = pageContext.getOut ();
      out.println (".");
    }
    catch (IOException e)
    {
      e.printStackTrace ();
      throw new JspException (e);
    }
    return EVAL_PAGE;
  }
 
  @Override
  public int doStartTag () throws JspException
  {
    JspWriter out = pageContext.getOut ();
    try
    {
      out.println ("Bonjour, les attributs valent " + attribute1 + " et " + attribute2 + ".<br />");
      out.println ("Le corps du message : ");
    }
    catch (IOException e)
    {
      e.printStackTrace ();
      throw new JspException (e);
    }
    return EVAL_BODY_INCLUDE;
  }
}
taglib2.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
  pageEncoding="UTF-8"%>
<%@ taglib uri="WEB-INF/tagperso2.tld" prefix="tag"%>
<%@ taglib uri="http://java.sun.com/jsf/core" prefix="f"%>
 
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>Insert title here</title>
</head>
<body>
  <f:view>
    <p>
      <tag:heure label="test" />
    </p>
  </f:view>
</body>
</html>

Rendu : Rendu exemple 2

helloworld/web/java/taglib/jsp.1439485973.txt.gz · Dernière modification : 2015/08/13 19:12 de root