ASP.NET Master Pages等效于Java

Tod*_*odd 6 java model-view-controller master-pages

什么是Java Web开发世界中的Master Pages等价物?我听说过Tiles,Tapestry和Velocity,但对它们一无所知.它们和母版页一样易于使用吗?

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

任何例子都会很棒!!

ton*_*one 12

您还应该查看Facelets ; developerWorks上有一篇很好的介绍性文章.

Facelets <ui:insert/>标记与<asp:ContentPlaceHolder/>母版页中使用的ASP.NET 标记相当; 它允许您为页面的该区域提供默认内容,但这可以被覆盖.

要在另一个页面中填充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 -->
Run Code Online (Sandbox Code Playgroud)

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>
Run Code Online (Sandbox Code Playgroud)

这将呈现为:

<!-- HTML header content here -->
Here is some new content
<p>Some new content here too</p>
<!-- HTML footer content here -->
Run Code Online (Sandbox Code Playgroud)

您还可以通过Facelets获得一些其他好处,例如能够重用具有不同数据的页面组件.

(编辑提供更多信息.)


Dwi*_*man 4

首先,Java 中的 ASP.Net 相当于一个 Web 框架,例如您提到的框架(Tiles、Tapestry 和 Velocity)。

母版页能够根据插入主模板的内容来定义页面。

母版页是 ASP.Net(.Net Web 框架)的一项功能,因此您正在寻找与 Java Web 框架中的母版页类似的功能。

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

Velocity 是一个通用模板引擎,不是专门用于网页的,而且肯定比您需要的更复杂。(我见过它用于代码生成。)

Tapestry 比 Tile 更像是一个功能齐全的 Web 堆栈,并且可能适合您的目的。它的模板功能涉及创建一个组件并将所有常见标记放入其中。示例位于http://www.infoq.com/articles/tapestry5-intro

具体细节根据您选择的 Java Web 框架而有所不同。