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>
helloworld/web/java/taglib/jsp.1439485973.txt.gz · Dernière modification : 2015/08/13 19:12 de root