问题:我有两个结构相同的页面home.jsp
和contact.jsp
。它们的区别仅在于正文内容和标题。我想使用tiles
框架创建一个Layout页面,并重用两个JSP
的代码。控制器框架尚未确定,可能是Spring MVC 3
或Struts 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:从cotroller/action类调用不同JSP
文件的tiles definition
。这种方法需要为我将要写入的JSP
文件中的每一个提供一个tiles definition
。因此总共有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:Same as **Solution A**
home.jsp:Content for home page
contact.jsp:Content for contact page
我想要关于我应该坚持以上哪种方法的建议。
第二种解决方案是最好的方法:
- 您可以在
tiles
属性中为每个属性设置独立的部分jsp
布局 - 您可以随时更改,以后不影响其他布局
struts
中最传统的使用方式
第一个解决方案:
- 以后可能会出现问题,必须对其进行任何更改进行编辑特别是当你深入到项目的高级阶段时
- 更通用的方法不适用于支柱/瓷砖建筑设计
解决方案B是实现的最佳方法
-
您将有一个单独的样式模板,如果其他jsp需要,您可以在以后重用它,而不会干扰jsp中的代码(如解决方案A)。
-
就理解而言,第二种方法更为明确,也是一种需要遵循的共同标准。
解决方案A通过分发配置以及在显式配置之上促进名称约定来帮助大型应用程序的维护。此外,它在概念上与JSF或普通标签等其他模板化解决方案兼容。例如,请参阅以下内容:JSP技巧使模板制作更容易?
想想一个应用程序,它有数百个控制器和视图,由不同的人在很长一段时间内编写。对于解决方案B,您将不得不面对一个巨大的tiles.xml文件。再加上稍微缺乏规范和视图名称,最终会导致配置中出现不一致的混乱和内容(如您的示例)。