我有一组edit.xhtml页面,每个页面都有一个相关的托管bean manager
,一个公共的定义子集,以及不同定义的子集。我想封装公共定义,但它失败了(manager
ui:param没有被传入):
来自典型的edit.xtml
:
<ui:composition template="/template.xhtml">
<ui:include src="/include/define_common_edit.xhtml">
<ui:param name="manager" value="#{quantityManager}"/>
</ui:include>
<ui:define name="body">
// specific part
define_common_edit.xhtml
的位置:
<ui:composition
xmlns="http://www.w3.org/1999/xhtml"
xmlns:ui="http://xmlns.jcp.org/jsf/facelets"
xmlns:util="http://xmlns.jcp.org/jsf/composite/util">
<ui:define name="htmltitle">
<util:edit_htmltitle manager="#{manager}"/>
</ui:define>
<ui:define name="title">
<util:edit_title manager="#{manager}"/>
</ui:define>
<ui:define name="actions">
<util:edit_actions manager="#{manager}"/>
</ui:define>
</ui:composition>
问:在这种情况下,为什么不ui:include
ui:define
处理ui:include
(即为什么ui:define
&#34;先工作&#34;之前{ {1}}被解释)?
可接受的答案不会简单地解释ui:include
和ui:define
如何运作,我已经知道了。答案必须是JSF规范。或类似的权威描述(我已经检查了JSF规范和Java EE教程,但还没有找到涵盖上述情况的确切描述。)
建议我如何以其他方式封装上面提到ui:define
元素的非变量组,以促进DRY编码。