如果我使用 ui:composite 和 ui:insert、ui:include,是否必须在模板中传递 ui:param?
Do I have to pass ui:param in template if I am using ui:composite and ui:insert, ui:include?
我有一页 main.xhtml,其中包含 ui:composition。此作文使用 template1.xhtml 文件。 template1.xhtml 文件包含指向 template2.xhtml 文件的 ui:insert、ui:include 标签。现在,我想使用从 template2.xhtml.
中的 ui:composition 传递的参数
main.xhtml
<ui:composition template="template1.xhtml">
<ui:param name="a1" value="val1"/>
</ui:composition>
template1.xhtml
<ui:insert name="header">
<ui:include src="template2.xhtml">
</ui:insert>
template2.xhtml
<h:panelGroup rendered="#{not empty a1}" layout="block">
<h4>#{a1}</h4>
</h:panelGroup>
我的问题是我可以直接访问名为 a1 的参数还是必须在 ui:include 中再次传递 ui:param?
取决于 Facelets 版本和 JSF impl/version。
在原始 Facelets 1.x 中,父组合中的任何 <ui:param>
都继承到所有 <ui:include>
个子元素中。
<ui:include src="template2.xhtml" />
在集成到 JSF 2.x 的 Facelets 2.x 中,应该在 <ui:include>
(或 <ui:decorate>
) 必须显式通过。
<ui:include src="template2.xhtml">
<ui:param name="a1" value="#{a1}" />
</ui:include>
至少,当您使用 Mojarra 时就是这种情况 2.x。然而,在 MyFaces 2.0 / 2.1 中,没有必要这样做,因为原始的 Facelets 1.x 行为无意中滑入了 MyFaces 2.0 / 2.1。
<ui:include src="template2.xhtml" />
他们已经在 MyFaces 2.2 中修复了它,因此您需要明确地传递它们。
<ui:include src="template2.xhtml">
<ui:param name="a1" value="#{a1}" />
</ui:include>
如果您使用的是 MyFaces 2.2 或更新版本,并希望保留原始的 Facelets 1.x 行为,那么您可以将以下上下文参数添加到 web.xml
:
<context-param>
<param-name>org.apache.myfaces.STRICT_JSF_2_FACELETS_COMPATIBILITY</param-name>
<param-value>true</param-value>
</context-param>
<ui:include src="template2.xhtml" />
Mojarra 不存在这样的上下文参数,因此如果您希望您的代码在所有 JSF 实现中都以相同的方式工作,则不应依赖此参数。
我有一页 main.xhtml,其中包含 ui:composition。此作文使用 template1.xhtml 文件。 template1.xhtml 文件包含指向 template2.xhtml 文件的 ui:insert、ui:include 标签。现在,我想使用从 template2.xhtml.
中的 ui:composition 传递的参数main.xhtml
<ui:composition template="template1.xhtml">
<ui:param name="a1" value="val1"/>
</ui:composition>
template1.xhtml
<ui:insert name="header">
<ui:include src="template2.xhtml">
</ui:insert>
template2.xhtml
<h:panelGroup rendered="#{not empty a1}" layout="block">
<h4>#{a1}</h4>
</h:panelGroup>
我的问题是我可以直接访问名为 a1 的参数还是必须在 ui:include 中再次传递 ui:param?
取决于 Facelets 版本和 JSF impl/version。
在原始 Facelets 1.x 中,父组合中的任何 <ui:param>
都继承到所有 <ui:include>
个子元素中。
<ui:include src="template2.xhtml" />
在集成到 JSF 2.x 的 Facelets 2.x 中,应该在 <ui:include>
(或 <ui:decorate>
) 必须显式通过。
<ui:include src="template2.xhtml">
<ui:param name="a1" value="#{a1}" />
</ui:include>
至少,当您使用 Mojarra 时就是这种情况 2.x。然而,在 MyFaces 2.0 / 2.1 中,没有必要这样做,因为原始的 Facelets 1.x 行为无意中滑入了 MyFaces 2.0 / 2.1。
<ui:include src="template2.xhtml" />
他们已经在 MyFaces 2.2 中修复了它,因此您需要明确地传递它们。
<ui:include src="template2.xhtml">
<ui:param name="a1" value="#{a1}" />
</ui:include>
如果您使用的是 MyFaces 2.2 或更新版本,并希望保留原始的 Facelets 1.x 行为,那么您可以将以下上下文参数添加到 web.xml
:
<context-param>
<param-name>org.apache.myfaces.STRICT_JSF_2_FACELETS_COMPATIBILITY</param-name>
<param-value>true</param-value>
</context-param>
<ui:include src="template2.xhtml" />
Mojarra 不存在这样的上下文参数,因此如果您希望您的代码在所有 JSF 实现中都以相同的方式工作,则不应依赖此参数。