我知道我应该在配置文件或自己的子类中定义装饰器ConfigurableSiteMeshFilter。例如:
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>
使用元标记
我们一直在这样做。
在您的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>
希望有帮助…