【问题标题】:which one of these is the better approach of using tiles其中哪一个是使用瓷砖的更好方法
【发布时间】:2012-07-13 06:26:11
【问题描述】:

问题:我有两个相同的页面home.jspcontact.jsp 具有相同的结构。它们仅在正文内容和标题上有所不同。我想使用tiles 框架创建一个布局页面并重用两个JSPs 的代码。控制器框架尚未确定,可能是Spring MVC 3Struts 2

解决方案 A: 直接从控制器/动作类调用 JSP 文件/视图。

我在tiles.xml 中写了一个定义,比如:

<definition name="baseLayout" template="/WEB-INF/jsp/layout/baseLayout.jsp">
    <put-attribute name="title" value="" />
    <put-attribute name="header" value="/WEB-INF/jsp/includes/header.jsp"/>
    <put-attribute name="body" value="" />
</definition>

现在在baseLayout.jsp:

<html>
    <head><title><tiles:insertAttribute name="title"/></title></head>
    <body>
        <div class="wrapper">
            <div class="header"><tiles:insertAttribute name="header"/></div>
            <div class="body"><tiles:insertAttribute name="body"/></div>
        </div>
    </body>
</html>

现在在home.jsp

<tiles:insertDefinition name="baseLayout">
    <tiles:putAttribute name="title">
        Title for home page
    </tiles:putAttribute>
    <tiles:putAttribute name="body">
        Content for home page
    </tiles:putAttribute>
</tiles:insertDefinition>

contact.jsp 类似:

<tiles:insertDefinition name="baseLayout">
    <tiles:putAttribute name="title">
        Title for contact page
    </tiles:putAttribute>
    <tiles:putAttribute name="body">
        Content for contact page
    </tiles:putAttribute>
</tiles:insertDefinition>

解决方案 B: 从 cotrollers/action 类调用不同 JSP 文件的 tiles definition。对于我要编写的每个JSP 文件,这种方法需要一个tiles definition。所以总共有 3 个图块定义(一个用于 baseLayout,另外两个用于 homecontact)。

tiles.xml:

<definition name="baseLayout" template="/WEB-INF/jsp/layout/baseLayout.jsp">
    <put-attribute name="title" value="" />
    <put-attribute name="header" value="/WEB-INF/jsp/includes/header.jsp"/>
    <put-attribute name="body" value="" />
</definition>

<definition name="home" extends="baseLayout">
    <put-attribute name="title" value="Title for home page" />
    <put-attribute name="header" value="/WEB-INF/jsp/home.jsp"/>
</definition>
<definition name="contact" extends="baseLayout">
    <put-attribute name="title" value="Title for contact page" />
    <put-attribute name="header" value="/WEB-INF/jsp/contact.jsp"/>
</definition>

baseLayout.jsp:Same as **Solution A**

home.jsp:Content for home page

contact.jsp:Content for contact page


我想就我应该坚持上述哪种方法提出建议。

【问题讨论】:

    标签: java jsp spring-mvc struts2 tiles


    【解决方案1】:

    第二种方案是最好的办法:

    • 您可以在 tiles 属性中为每个 jsp 布局。
    • 您可以随时更改,以后不会影响其他布局
    • struts中最传统的使用方式

    第一个解决方案:

    • 以后可能会导致问题,因为必须对它们进行任何更改进行编辑 特别是当您深入了解高级项目时
    • 更通用的方法不适合 struts/tiles 架构 设计

    【讨论】:

      【解决方案2】:

      解决方案 B 是实现的最佳方法,

      • 您将拥有单独的样式模板,如果其他 jsp 需要,您可以在以后重复使用这些模板,而不会像解决方案 A 那样弄乱 jsp 中的代码。

      • 据了解,第二种方法更加清晰,并且是一个可以遵循的通用标准。

      【讨论】:

        【解决方案3】:

        解决方案 A 通过分发配置以及在显式配置上推广名称约定来帮助维护大型应用程序。此外,它在概念上与其他模板解决方案(例如 JSF 或普通标签)兼容。例如看到这个:JSP tricks to make templating easier?

        想想一个包含数百个控制器和视图的应用程序,这些控制器和视图由不同的人在很长一段时间内编写。使用解决方案 B,您将不得不面对一个巨大的 tiles.xml 文件。添加稍微缺乏纪律和视图名称最终会导致配置中出现不一致的混乱和内容(如您的示例)。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2010-09-15
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2018-05-28
          • 2017-08-18
          • 1970-01-01
          相关资源
          最近更新 更多