可以在jsf中使用这样的东西吗?
<ui:composition>
<x:reusableCode id="editScreen">InnerHtml ... </x:reusableCode>
code...
<x:use component="editScreen"/>
</ui:composition
我知道我可以创建自己的组件并在jsf tagLib中注册它,但我只需要在jsf视图文件中重用HTML。
答案 0 :(得分:4)
在Facelets 1.x中,您可以为此创建一个标记文件。
这是一个基本的启动示例。创建/WEB-INF/tags/some.xhtml
:
<ui:composition
xmlns:f="http://java.sun.com/jsf/core"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:ui="http://java.sun.com/jsf/facelets"
>
<h:outputText value="#{foo}" />
</ui:composition>
在/WEB-INF/my.taglib.xml
中定义:
<?xml version="1.0" encoding="UTF-8"?>
<!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://example.com/jsf/facelets</namespace>
<tag>
<tag-name>some</tag-name>
<source>/WEB-INF/tags/some.xhtml</source>
</tag>
</facelet-taglib>
在/WEB-INF/web.xml
注册:
<context-param>
<param-name>facelets.LIBRARIES</param-name>
<param-value>/WEB-INF/my.taglib.xml</param-value>
</context-param>
(注意,如果您有多个,请使用分号;
分隔它们)
最后只需在主页模板中声明它。
<ui:composition
xmlns:f="http://java.sun.com/jsf/core"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:my="http://example.com/jsf/facelets"
>
<my:some foo="value1" />
<my:some foo="value2" />
<my:some foo="value3" />
</ui:composition>
可以在这里找到一个更高级的示例:How to make a grid of JSF composite component?注意:JSF 2.0是针对性的,但基于上面的示例进行了微小的更改,它在Facelets 1.x上运行良好。