Java中等效的ASP.NET母版页

时间:2020-03-05 18:42:42  来源:igfitidea点击:

Java Web开发领域中的Master Pages相当于什么?我听说过Tiles,Tapestry和Velocity,但对它们一无所知。它们是否像母版页一样易于使用?

我想要设置一个模板,然后从模板派生后续页面并覆盖内容区域(类似于母版页)那样简单。

任何例子都很棒!

解决方案

回答

首先,Java中相当于ASP.Net的将是一个Web框架,例如我们提到的框架(标题,Tapestry和Velocity)。

母版页提供了根据插入到母版模板中的内容来定义页面的功能。

母版页是ASP.Net(.Net Web框架)的功能,因此我们正在寻找与Java Web框架中的母版页相似的功能。

http://tiles.apache.org/framework/tutorial/basic/pages.html给出了一些使用Tiles和JSP来实现与Java Web框架Struts类似的基本示例。在这种情况下,"母版页"功能是Struts之上的插件。

Velocity是一个通用的模板引擎,不专门用于网页,并且绝对比我们需要的复杂。 (我已经看到它用于代码生成。)

Tapestry比Tile具有更多的全功能Web堆栈,可能对我们有用。它的模板功能涉及创建一个组件,并在其中放置所有通用标记。一个示例在http://www.infoq.com/articles/tapestry5-intro。

具体取决于所选择的Java Web框架。

回答

我们还应该签出Facelets;在DeveloperWorks上有一篇很好的介绍性文章。

Facelets的<ui:insert />标记与母版页中使用的ASP.NET的<asp:ContentPlaceHolder />标记相当。它使我们可以为页面的该区域提供默认内容,但是可以将其覆盖。

要在另一个页面中填充Facelets模板,请从指向模板文件的&lt;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还具有其他一些优点,例如能够重用具有不同数据的页面组件。

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