Welcome to WuJiGu Developer Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
341 views
in Technique[技术] by (71.8m points)

jsf - How to create a custom Facelets tag?

I am using JSF 2.0. I created custom JSTL tags with tagfiles and that were working fine in JSP. But I want to use custom JSTL tags in Facelets too. Is it possible to create tagfiles in Facelets or not?

Question&Answers:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Answer

0 votes
by (71.8m points)

"Custom JSTL tags" makes honestly no sense. This term is utterly meaningless. JSTL is already a taglib at its own. Please carefully read the introductory paragraphs of our JSTL wiki page to learn what JSTL really is. You perhaps actually meant "Custom JSP tags". Of course they would not work in Facelets as that's a completely different view technology than JSP and actually the successor of the deprecated JSP.

Well, the analogy of a "Custom JSP tag" is a "Custom Facelets tag", or more commonly "Facelets tag file". It's rather simple, you can follow the same syntax as an include file.

/WEB-INF/tags/some.xhtml:

<ui:composition xmlns:ui="http://java.sun.com/jsf/facelets">
    Hello World
    ...
    <ui:insert /> <!-- This inserts tag body, if necessary. -->
</ui:composition>

and register it in /WEB-INF/example.taglib.xml as follows:

<?xml version="1.0" encoding="UTF-8"?>
<facelet-taglib 
    xmlns="http://java.sun.com/xml/ns/javaee"
    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"
    version="2.0">
    <namespace>http://example.com/jsf/facelets</namespace>
    <tag>
        <tag-name>some</tag-name>
        <source>tags/some.xhtml</source>
    </tag>
</facelet-taglib>

which is in turn registered in /WEB-INF/web.xml as follows:

<context-param>
    <param-name>javax.faces.FACELETS_LIBRARIES</param-name>
    <param-value>/WEB-INF/example.taglib.xml</param-value>
</context-param>

(note that registration in web.xml is unnecessary when the *.taglib.xml file is in /META-INF folder of a JAR in /WEB-INF/lib)

and finally use it in your templates as follows:

<html ... xmlns:my="http://example.com/jsf/facelets">
...
<my:some />

See also:


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome to WuJiGu Developer Q&A Community for programmer and developer-Open, Learning and Share
...