Jsf facelet自定义标记的参数化
我已创建facelet模板: left-right.xhtmlJsf facelet自定义标记的参数化,jsf,facelets,Jsf,Facelets,我已创建facelet模板: left-right.xhtml <ui:composition> <ui:include name="left" /> <hr /> <ui:include name="right" /> </ui:composition> 之后,如果我将此模板与ui:decoration一起使用,则效果良好: index.xhtml <ui:decorate template="l
<ui:composition>
<ui:include name="left" />
<hr />
<ui:include name="right" />
</ui:composition>
之后,如果我将此模板与ui:decoration一起使用,则效果良好:
index.xhtml
<ui:decorate template="left-right.xhtml">
<ui:define name="left">FOO</ui:define>
<ui:define name="right">BAR</ui:define>
</ui:decorate>
<custom:leftright>
<ui:define name="left">FOO</ui:define>
<ui:define name="right">BAR</ui:define>
</custom:leftright>
福
酒吧
但是,如果我将此模板用作自定义facelet标记,它将不起作用
custom-taglib.xml
<facelet-taglib>
<tag>
<tag-name>leftright</tag-name>
<source>left-right.xhtml</source>
</tag>
</facelet-taglib>
左右
left-right.xhtml
index.xhtml
<ui:decorate template="left-right.xhtml">
<ui:define name="left">FOO</ui:define>
<ui:define name="right">BAR</ui:define>
</ui:decorate>
<custom:leftright>
<ui:define name="left">FOO</ui:define>
<ui:define name="right">BAR</ui:define>
</custom:leftright>
福
酒吧
ui:define标记中的内容不包括在模板中:(
所以,问题是,如果facelet模板呈现为facelet自定义标记,我如何对其进行参数化?(请注意,您的左右.xhtml中存在语法错误,您应该使用
,而不是
,但我认为这只是粗心的过于简化)
标记文件不能被视为模板客户端。您需要根据具体的功能需求对其进行不同的处理。如果您使用的是JSF 2.x,那么A将是最接近您需要的。您可以将部分定义为
,并在复合实现中通过
呈现它们
例如
/resources/custom/leftRight.xhtml
<cc:interface>
<cc:facet name="left" required="true" />
<cc:facet name="right" required="true" />
</cc:interface>
<cc:implementation>
<cc:renderFacet name="left" />
<hr />
<cc:renderFacet name="right" />
</cc:implementation>
用法:
<custom:leftRight>
<f:facet name="left">FOO</f:facet>
<f:facet name="right">FOO</f:facet>
</custom:leftRight>
福
福
但是,如果您仍然使用JSF1.x,则无法创建复合组件。您需要坚持使用
另见:
既然有tagAttribute、methodParam,那么引入o:facet
(与renderFacet
功能相同,因此facet可以与facelet标记一起使用)怎么样?