问题:我有两个相同的网页home.jsp
和contact.jsp
具有相同的结构。它们仅在身体内容和标题方面有所不同。我想使用tiles
框架创建一个布局页面,并重用两个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:从cotrollers / action类中调用tiles definition
个不同JSP
个文件。对于我将编写的每个tiles definition
文件,此方法需要一个JSP
。总共有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
我想知道我应该坚持哪种上述方法。
答案 0 :(得分:3)
第二种解决方案是最好的方法:
tiles
属性中为每个属性设置独立部分
jsp
布局。struts
第一个解决方案:
答案 1 :(得分:1)
解决方案B是实施的最佳方法,
您将拥有单独的样式模板,如果其他jsp需要,您可以在以后重复使用,而不会像解决方案A那样弄乱jsp中的代码。
在理解时,第二种方法更加清晰,并且遵循一个共同的标准。
答案 2 :(得分:0)
解决方案A通过分发配置并通过显式配置提升名称约定来帮助维护大型应用程序。此外,它在概念上与其他模板解决方案兼容,如JSF或普通标签。例如,请参阅:JSP tricks to make templating easier?
考虑一个具有数百个控制器的应用程序和不同人在很长一段时间内编写的视图。使用解决方案B,您将不得不面对一个巨大的tiles.xml文件。添加略微缺乏纪律和视图名称最终会在配置中出现不一致的混乱和内容(如您的示例)。