Nécessite un projet de type [[ide:eclipse:projet|Dynamic Web Project]] avec les ''JSF'' activés.
=====component + renderer=====
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;
@FacesRenderer (componentFamily="com.llgc.heureCourante", rendererType="com.llgc.heureAvecRenderer")
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 ("
" + intitule + ":" + heureCourante
+ "
");
super.encodeBegin (context, component);
}
}
package com.llgc;
import java.io.IOException;
import javax.faces.component.html.HtmlOutputText;
import javax.faces.context.FacesContext;
import javax.faces.context.ResponseWriter;
@FacesComponent ("com.llgc.monHtmlHeureCourante")
public class TagHeureHtml extends HtmlOutputText
{
@Override
public String getFamily ()
{
return "com.llgc.heureCourante";
}
@Override
public void encodeEnd (FacesContext context) throws IOException
{
ResponseWriter out = context.getResponseWriter ();
out.write (" ");
super.encodeEnd (context);
}
}
javax.faces.FACELETS_LIBRARIES/META-INF/tagheure.taglib.xmlhttp://llgc.orgheurecom.llgc.monHtmlHeureCourantecom.llgc.heureAvecRendererlabeltrueInsert title here
Rendu :
{{:helloworld:web:java:taglib:jsp:rendu_ex2.png|Rendu exemple 2}}
=====Source XHTML=====
Volé (et actualisé) depuis [[http://www.mkyong.com/jsf2/custom-tags-in-jsf-2-0/|Custom tags in JSF 2.0]] {{ :helloworld:web:java:taglib:jsf:custom_tags_in_jsf_2.0_mkyong.com_2020-04-26_12_20_37_am_.html |Archive du 29/08/2012 le 27/04/2020}}
#{label}:
http://llgc.org/2heuretaglibsource.xhtmllabeltruejavax.faces.FACELETS_LIBRARIES/META-INF/tagheure2.taglib.xml
Il est possible de spécifier plusieurs ''taglib.xml'' dans le fichier ''web.xml'' en les séparant par des '';''.
Insert title here
Rendu :
{{:helloworld:web:java:taglib:jsp:rendu_ex2.png|Rendu exemple 2}}
=====Ajout d'un validateur des attributs=====
En ''JSF'', il n'est possible de valider les attributs que pour des composants héritants de ''EditableValueHolder'', par exemple ''HtmlInputText'' ou encore ''HtmlSelectManyCheckbox''.
La seule solution que j'ai trouvé pour avoir un comportement similaire à ''isValid'' de ''TagExtraInfo'' est de générer une exception ''IOException'' dans la méthode ''encodeBegin'' du ''Renderer''.