我的网络应用中的许多页面都有以下结构。我想在页面代码之前和之后创建一个带有固定代码的模板页面,然后为每个不同的页面放置我的代码。问题是我应该在不同的文件中剪切div
。
<!-- fixed jsp code
<header>
<imports> ...
<div id="some-fixes-divs-inside">
-->
page code
<!-- fixed jsp code
</div>
<other>
<footer>
-->
我知道的唯一方法就是这样,但我认为切割div
不是一个好习惯:
<jsp:include page="fixed-jsp-code-head.jsp" />
my page code
<jsp:include page="fixed-jsp-code-footer.jsp" />
Q1:jsp或任何其他框架中是否有任何指令或内容可以做到这一点?
Q2:如果第一个Q不是,我的解决方案是不好的做法吗?
编辑:我想知道是否有任何类似<import>mycode</import>
的指令在模板中包含所有代码页脚和标题,并且不要打开相同的div
1}}在标题中并在页脚中关闭它,并将我的代码放在模板中。
答案 0 :(得分:2)
您也可以使用Apache Tiles。它是一个模板组合框架。像this一样。
首先,定义一个模板:
<definition name="myapp.homepage" template="/layouts/classic.jsp">
<put-attribute name="header" value="/tiles/banner.jsp" />
<put-attribute name="menu" value="/tiles/common_menu.jsp" />
<put-attribute name="body" value="/tiles/home_body.jsp" />
<put-attribute name="footer" value="/tiles/credits.jsp" />
</definition>
然后在你的代码中使用它:
<%@ taglib uri="http://tiles.apache.org/tags-tiles" prefix="tiles" %>
<table>
<tr>
<td colspan="2">
<tiles:insertAttribute name="header" />
</td>
</tr>
<tr>
<td>
<tiles:insertAttribute name="menu" />
</td>
<td>
<tiles:insertAttribute name="body" />
</td>
</tr>
<tr>
<td colspan="2">
<tiles:insertAttribute name="footer" />
</td>
</tr>
</table>
答案 1 :(得分:1)
如果第一个Q不是,我的解决方案是不好的做法吗?
在我看来,根据各自的功能分离jsps是一种很好的做法。这使得您的代码松散耦合。将来,如果你必须更改页眉/页脚代码,你只需要在一个地方更改它,减少大量的返工。
Q1:jsp或任何其他框架中是否有任何指令或内容 这样做?
在另一个jsp中包含jsp的标准方法是使用
<%@include file="your jsp"/>
(静态包含)或
<jsp:include page="fixed-jsp-code-footer.jsp" />
(动态包含)
您还可以使用JSTL标记
`<c:import url=”http://www.example.com/foo/bar.html” />` (dynamic include)
它很有用,但它更强大和灵活:与其他两个包含不同,url可以来自web容器外部!