Java JSP中类似PHP的输出缓冲(让子模板影响主模板)
在我的网站中,我有一个主JSP模板:Java JSP中类似PHP的输出缓冲(让子模板影响主模板),java,jsp,spring-mvc,tiles2,Java,Jsp,Spring Mvc,Tiles2,在我的网站中,我有一个主JSP模板: <html> <body> <nav>...</nav> <tiles:insertAttribute name="body" /> <footer>...</footer> </body> </html> ... ... 和多个页面模板: <p>This is content</p> 这是内容 现在我
<html>
<body>
<nav>...</nav>
<tiles:insertAttribute name="body" />
<footer>...</footer>
</body>
</html>
...
...
和多个页面模板:
<p>This is content</p>
这是内容
现在我希望页面模板能够定义一些Javascript和CSS包含,因此页面模板必须在主模板的
之前执行
在PHP中,我可以使用输出缓冲:
<? ob_start()
include $slave;
$body = ob_get_clean(); ?>
<html>
<head>
<? foreach($javascripts as $script) ?>
<script src="<?=$script?>" />
<? endforeach ?>
<body>
<nav>...</nav>
<?=$body?>
<footer>...</footer>
</body>
</html>
您可以在平铺定义中定义一个附加属性(默认情况下为空),然后将该属性插入布局页面的head部分。这就是瓷砖的工作原理
或者您可以使用Sitemesh而不是Tiles,这符合您的建议:它使用一个过滤器缓冲响应,然后通过提取响应的一些元素并将它们放入模板来装饰响应
我想可以同时使用Sitemesh和Tiles,但这会变得有点太复杂,IMHO。我找到了解决问题的另一种方法
我已使用以下内容扩展了主模板:
<head>
<tiles:insertAttribute name="head" defaultValue="" />
</head>
我有一个生成tiles定义XML文件的脚本(已经有了)。如果子模板(比如view.jsp
)需要额外的CSS或Javascript,我将创建一个单独的文件view\u head.jsp
,其中包含正确的包含内容,脚本将为该文件设置属性head
。1)启用核心标记库
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
2) 图形和打印内容
<c:set var="content">You grab content</c:set>
<c:out value="${content}" />
您可以抓取内容
与此同时,我已经找到了一个解决方案(见答案),它确实为头部添加了一个额外的属性。这比缓冲技巧更好,这可能有点像黑客。