Java Web 开发世界中的母版页等价物是什么?我听说过 Tiles、Tapestry 和 Velocity,但对它们一无所知。它们是否像母版页一样易于使用?
我想要一些简单的东西,比如设置一个模板,后续页面从模板派生并覆盖内容区域,类似于母版页。
任何例子都会很棒!
Java Web 开发世界中的母版页等价物是什么?我听说过 Tiles、Tapestry 和 Velocity,但对它们一无所知。它们是否像母版页一样易于使用?
我想要一些简单的东西,比如设置一个模板,后续页面从模板派生并覆盖内容区域,类似于母版页。
任何例子都会很棒!
您还应该查看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 获得其他一些好处,例如能够重用具有不同数据的页面组件。
(编辑以提供更多信息。)
首先,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 框架)类似的基本示例。在这种情况下,Master Pages 功能是 Struts 之上的一个插件。
Velocity 是一个通用的模板引擎,不是专门为网页设计的,而且肯定比你需要的更复杂。(我已经看到它用于代码生成。)
与 Tile 相比,Tapestry 更像是一个功能齐全的 Web 堆栈,并且可能更适合您的目的。它的模板功能包括创建一个组件并将所有常见的标记放入其中。一个例子是http://www.infoq.com/articles/tapestry5-intro。
具体情况会根据您选择的 Java Web 框架而有所不同。