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



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

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

谢谢你的回答。

最简单的方法可能是将List.xhtml的body部分拆分为自己的<ui:composition>。然后,您可以在需要它的页面中与<ui:decorate>一起重用它。这将是"模板"的做法。

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

更新示例(参见此处)。

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>
...

另一种说法:

template.xhtml:

......
<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>

希望能帮到别人。

相关内容

  • 没有找到相关文章

最新更新