是否可以使用 Sitemesh 在 JSP 中直接定义装饰器?
Posted
技术标签:
【中文标题】是否可以使用 Sitemesh 在 JSP 中直接定义装饰器?【英文标题】:Is it possible to define a decorator directly in a JSP with Sitemesh? 【发布时间】:2011-07-10 18:32:15 【问题描述】:我知道我应该在配置文件或我自己的ConfigurableSiteMeshFilter
子类中定义装饰器。例如:
public class SitemeshFilter extends ConfigurableSiteMeshFilter
@Override
protected void applyCustomConfiguration(final SiteMeshFilterBuilder builder)
builder.addDecoratorPath("/*", "/WEB-INF/views/layouts/default.jsp");
这对我有用,但这并不完美。我可以在 JSP 文件中直接定义要使用的装饰器吗?
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%@ page session="false" %>
<html sitemesh:decorator="layouts/default.jsp"> <!-- something like this -->
<head>
<title>Home</title>
<meta content="test" name="description" />
</head>
<body>
<h1>Hello world!</h1>
$body
</body>
</html>
【问题讨论】:
【参考方案1】:使用元标记
我们一直这样做。
在您的 sitemesh.xml 中,允许页面位于名为 decorator 的元标记中,例如:
<decorator-mappers>
<mapper class="com.opensymphony.module.sitemesh.mapper.PageDecoratorMapper">
<param name="property.1" value="meta.decorator"/>
<param name="property.2" value="decorator" />
</mapper>
</decorator-mappers>
在您的 decorators.xml 中,添加如下装饰器:
<decorators>
<decorator name="default" page="/WEB-INF/decorators/default.jsp" />
<decorator name="alternative" page="/WEB-INF/decorators/alternative.jsp" />
<decorators>
然后,在您的 html 或 jsp 页面中,您可以添加一个名为 decorator 的元标记来在默认模板和替代模板之间切换:
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%@ page session="false" %>
<html>
<head>
<meta name="decorator" content="alternative" />
<title>Home</title>
<meta content="test" name="description" />
</head>
<body>
<h1>Hello world!</h1>
$body
</body>
</html>
希望对您有所帮助...
【讨论】:
以上是关于是否可以使用 Sitemesh 在 JSP 中直接定义装饰器?的主要内容,如果未能解决你的问题,请参考以下文章