Facelets:只需要页面的<ui:define>标签</ui:define>

时间:2011-08-23 14:27:39

标签: java jsf facelets

好的,要将页面包含在另一个页面中,我需要<ui:include src="pageName"/>标记。但是,如果我只想包含一部分页面?

让我解释一下: 我的模板包含标记<ui:insert name="body"/>和其他<ui:insert.../>标记。 List.xhtml页面使用此模板,当然,填充所有模板标签。现在,在另一个名为Create.xhtml(使用相同的模板)的页面中,在某一点上,我想只放置List.xhtml的body标签内容,而不是其他标签。有可能吗?

谢谢你的答案。

2 个答案:

答案 0 :(得分:2)

最简单的方法可能是将List.xhtml的正文部分分解为自己的<ui:composition>。然后,您可以在需要的页面中使用<ui:decorate>重复使用它。这将是“模板”的方式。

另外,您可以在身体部分创建<ui:component>。这将是实现这一目标的“组件”方式。两者都应达到相同的基本目标,但构图/装饰可能更简单。

UPDATE 示例(另请参阅here)。

commonBody.xhtml

...
<ui:composition>
<p>This is some common body.</p>
<p><ui:insert name="dynamicBody" /></p>
</ui:composition>

List.xhtml

...
<body>
<h1>This is the List.xhtml</h1>
<ui:decorate template="commonBody.xhtml">
<ui:define name="dynamicBody">Body of List.xhtml</ui:define>
</ui:decorate>
</body>
...

会输出类似

的内容
...
<body>
<h1>This is the List.xhtml</h1>
<p>This is some common body.</p>
<p>Body of List.xhtml</p>
</body>
...

答案 1 :(得分:0)

另一种方式:

所引用:

......

<ui:insert name="body"/>

......

List.xhtml:

<ui:composition xmlns=....... template="/template.xhtml">

..............

     <ui:define name="body">

          <ui:include src="ListContent.xhtml"/>

     </ui:define>

..............

</ui:composition>

ListContent.xhtml

<ui:component xmlns....>

     Content I can reuse in other pages different by List.xhtml 
     (without see List.xhtml entire content, which is the scope of this question),
     simply writing "<ui:include src="ListContent.xhtml"/>" in the target page code.

</ui:component>
希望可以帮助别人。