Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jquery-ui/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jsf facelet自定义标记的参数化_Jsf_Facelets - Fatal编程技术网

Jsf facelet自定义标记的参数化

Jsf 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

我已创建facelet模板:

left-right.xhtml

<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标记一起使用)怎么样?