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.xml http://llgc.org heure com.llgc.monHtmlHeureCourante com.llgc.heureAvecRenderer label true Insert 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/2 heure taglibsource.xhtml label true javax.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''.