Java中等同于ASP.NET Master Pages的内容

6

在Java Web开发世界中,类似于Master Pages的东西是什么?我听说过Tiles、Tapestry和Velocity,但对它们一无所知。它们使用起来像Master Pages一样容易吗?

我想要一个像设置一个模板那样简单的东西,后续页面都从模板派生出来并覆盖内容区域,就像Master Pages一样。

有任何示例将会很棒!

3个回答

12

你还应该查看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还有其他好处,比如能够重复使用页面组件以展示不同的数据。

(编辑以提供更多信息。)


4
首先,Java中与ASP.Net相当的是Web框架,例如您提到的Tiles、Tapestry和Velocity。
Master Pages允许将页面定义为插入主模板的内容。
Master Pages是ASP.Net(.Net Web框架)的一个功能,因此您在寻找类似于Java Web框架中Master Pages的功能。 http://tiles.apache.org/framework/tutorial/basic/pages.html提供了一些基本示例,使用Tiles和JSP来实现类似于Struts的功能。在这种情况下,Master Pages功能是在Struts之上的插件。
Velocity是一种通用的模板引擎,不专门用于网页,并且比您需要的更复杂。(我见过它用于代码生成。)
Tapestry是一个更完整的Web堆栈,比Tile更好,并且可能适合您的目的。其模板功能涉及创建组件并将所有常见标记放入其中。示例位于http://www.infoq.com/articles/tapestry5-intro
具体内容取决于您选择的Java Web框架。

2

我之前在项目中使用过Sitemesh,它非常容易设置。本质上,你需要创建装饰器,这些装饰器相当于主页面。然后你需要定义哪些子页面使用哪个装饰器。更多信息请参见介绍Sitemesh


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接