Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/374.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 以下哪一种是使用瓷砖的更好方法_Java_Jsp_Spring Mvc_Struts2_Tiles - Fatal编程技术网

Java 以下哪一种是使用瓷砖的更好方法

Java 以下哪一种是使用瓷砖的更好方法,java,jsp,spring-mvc,struts2,tiles,Java,Jsp,Spring Mvc,Struts2,Tiles,问题:我有两个结构相同的页面home.jsp和contact.jsp。它们只在正文内容和标题上有所不同。我想使用tilesframework创建一个布局页面,并为两个JSPs重用代码。控制器框架尚未确定,它可能是springmvc3或struts2 解决方案A:直接从控制器/操作类调用JSP文件/视图 我在tiles.xml中编写了一个定义,如下所示: <definition name="baseLayout" template="/WEB-INF/jsp/layout/baseLayou

问题:我有两个结构相同的页面
home.jsp
contact.jsp
。它们只在正文内容和标题上有所不同。我想使用
tiles
framework创建一个布局页面,并为两个
JSP
s重用代码。控制器框架尚未确定,它可能是
springmvc3
struts2

解决方案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>
现在进入
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>
解决方案B:调用来自cotrollers/action类的不同
JSP
文件的
tiles定义。这种方法需要为我将要编写的每个
JSP
文件定义一个
tiles
。因此,总共有3个瓷砖定义(一个用于
baseLayout
,另外两个用于
home
contact

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:
与**解决方案A**

home.jsp:
主页内容

contact.jsp:
联系人页面的内容



我想知道我应该坚持以上哪种方法。

第二种解决方案是最好的方法:

  • 您可以在
    平铺
    属性中为每个平铺设置独立部分
    jsp
    布局
  • 您可以随时更改,而不会影响以后的其他布局
  • struts中使用最传统的方法
第一个解决方案:

  • 可能会导致以后需要对其进行修改时出现问题 特别是当你深陷高级项目时
  • 更通用的方法不适用于struts/tiles体系结构 设计

解决方案B是实施的最佳方法

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

  • 随着理解的深入,第二种方法更加清晰,并且是一个可以遵循的共同标准


解决方案A通过分发配置和促进名称约定而不是显式配置,帮助在大型应用程序中进行维护。此外,它在概念上与其他模板解决方案(如JSF或普通标记)兼容。例如,请参见:

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

<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>
<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>