在Java Web开发世界中,类似于Master Pages的东西是什么?我听说过Tiles、Tapestry和Velocity,但对它们一无所知。它们使用起来像Master Pages一样容易吗?
我想要一个像设置一个模板那样简单的东西,后续页面都从模板派生出来并覆盖内容区域,就像Master Pages一样。
有任何示例将会很棒!
在Java Web开发世界中,类似于Master Pages的东西是什么?我听说过Tiles、Tapestry和Velocity,但对它们一无所知。它们使用起来像Master Pages一样容易吗?
我想要一个像设置一个模板那样简单的东西,后续页面都从模板派生出来并覆盖内容区域,就像Master Pages一样。
有任何示例将会很棒!
你还应该查看Facelets; DeveloperWorks上有一篇很好的介绍文章。
Facelets中的<ui:insert/>
标签类似于主页面中使用的ASP.NET中的<asp:ContentPlaceHolder/>
标签;它允许为页面的该区域提供默认内容,但是这可以被覆盖。
要在另一页中填充Facelets模板,您需要从指向模板文件的<ui:composition/>
元素开始。这大致相当于在ASP.NET页面中声明MasterPageFile属性。
在<ui:composition/>
元素内,您可以使用<ui:define/>
元素来覆盖模板默认值,类似于使用<asp:Content/>
标签的方式。这些元素可以包含任何类型的内容-从简单字符串到JSF元素。
因此,将所有内容结合在一起...
在master.xhtml中:
<!-- HTML header content here -->
<ui:insert name="AreaOne">Default content for AreaOne</ui:insert>
<ui:insert name="AreaTwo">Default content for AreaTwo</ui:insert>
<!-- HTML footer content here -->
在page.xhtml中:
<ui:composition template="/WEB-INF/templates/master.xhtml">
<ui:define name="AreaOne">Here is some new content</ui:define>
<ui:define name="AreaTwo">
<p>Some new content here too</p>
</ui:define>
</ui:composition>
这将渲染为:
<!-- HTML header content here -->
Here is some new content
<p>Some new content here too</p>
<!-- HTML footer content here -->
使用Facelets还有其他好处,比如能够重复使用页面组件以展示不同的数据。
(编辑以提供更多信息。)
我之前在项目中使用过Sitemesh,它非常容易设置。本质上,你需要创建装饰器,这些装饰器相当于主页面。然后你需要定义哪些子页面使用哪个装饰器。更多信息请参见介绍Sitemesh。