【问题标题】:ASP.NET Master Pages equivalent in JavaJava 中等效的 ASP.NET 母版页
【发布时间】:2010-09-06 17:37:01
【问题描述】:

在 Java Web 开发世界中,母版页等价物是什么?我听说过 Tiles、Tapestry 和 Velocity,但对它们一无所知。它们是否像母版页一样易于使用?

我想要一些简单的东西,比如设置一个模板,后续页面从模板派生并覆盖内容区域,类似于母版页。

任何例子都会很棒!!

【问题讨论】:

    标签: java model-view-controller master-pages


    【解决方案1】:

    您还应该查看Facelets; DeveloperWorks 上有一个good introductory article

    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 获得其他一些好处,例如能够重用具有不同数据的页面组件。

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

    【讨论】:

      【解决方案2】:

      首先,在 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 是一个通用的模板引擎,不是专门用于网页的,而且肯定比您需要的要复杂得多。 (我见过它用于代码生成。)

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

      具体情况因您选择的 Java Web 框架而异。

      【讨论】:

        【解决方案3】:

        我在以前的项目中使用过sitemesh,它很容易设置。本质上,您创建了与母版页等效的装饰器。然后,您定义哪些子页面使用哪些装饰器。请参阅introduction to sitemesh 了解更多信息。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多