Faceletsで作るカスタムタグ
Faceletsで作るカスタムタグ
1) web.xml
下記追加
<context-param> <param-name>facelets.DEVELOPMENT</param-name> <param-value>true</param-value> </context-param> <context-param> <param-name>facelets.LIBRARIES</param-name> <param-value> <![CDATA[/WEB-INF/taglib/hoge-taglib.xml]]> </param-value> </context-param>
<ui:composition xmlns="http://www.w3.org/1999/xhtml" xmlns:ui="http://java.sun.com/jsf/facelets" xmlns:h="http://java.sun.com/jsf/html"> <h:outputText value="#{value}" /> </ui:composition>
<?xml version="1.0"?> <!DOCTYPE facelet-taglib PUBLIC "-//Sun Microsystems, Inc.//DTD Facelet Taglib 1.0//EN" "http://java.sun.com/dtd/facelet-taglib_1_0.dtd"> <facelet-taglib> <namespace>http://foo.bar/jsf</namespace> <tag> <tag-name>echo</tag-name> <source>../tag/hoge.xhtml</source> </tag> </facelet-taglib>
<?xml version="1.0" encoding="UTF-8"?> <taglib version="2.1" 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/dtd/web-jsptaglibrary_1_2.dtd"> <tlib-version>1.2</tlib-version> <short-name>fb</short-name> <uri>http://foo.bar.jp/jsf</uri> <tag> <description>echoタグ</description> <name>echo</name> <tag-class/> <body-content>JSP</body-content> <attribute> <description>画面に表示する文字列</description> <name>value</name> <required>true</required> <rtexprvalue>true</rtexprvalue> <type>java.lang.String</type> </attribute> </tag> </taglib>
使い方
<ui:composition xmlns="http://www.w3.org/1999/xhtml" xmlns:ui="http://java.sun.com/jsf/facelets" xmlns:fb="http://foo.bar.jp/jsf"> <fb:echo value="hello world!" /> </ui:composition>
ポイントは 2) 内で記述したEL式の変数が、そのままカスタムタグの属性名になり、そこに指定した属性値が 2) のEL式に代入されるというところ。