如何在Sitemesh 3中使用自定义属性

时间:2013-03-15 20:15:44

标签: jsp templates sitemesh

给出一个简单的模板JSP,用于Sitemesh 3的渲染:

<%@include file="../jsp_inc/taglibs.jsp" %>
<!DOCTYPE html>
<head>
    <link rel="stylesheet" type="text/css" href='<c:url value="/css/global.css" />' >
</head>
<body>
<h1>[HEADING]</h1>
<div>
    <sitemesh:write property='body'/>
</div>
</body>

该模板按预期工作,将JSP元素的内容插入模板中。

正如您对上述内容的期望,我希望能够将JSP中的值集(例如.h1元素)插入到模板中的相应元素中。

我试过了:

<sitemesh:getProperty property="page.heading"></sitemesh:getProperty>

在模板/装饰器中:

<content tag="heading"></content>

在JSP中,关于SO的另一个问题,但我认为可能是指Sitemesh 2.我正在使用Sitemesh 3.

有什么建议吗?

1 个答案:

答案 0 :(得分:11)

不确定您是否仍在使用Sitemesh 3,但我正在检查它,并且在浏览源代码后发现您已配置构建器。

我正在使用Java based configuration并创建了我自己的子类,它添加了一个支持Sitemesh 2样式内容块的标记处理规则包:

public class MySiteMeshFilter extends ConfigurableSiteMeshFilter {
    @Override
    protected void applyCustomConfiguration(SiteMeshFilterBuilder builder) {
        builder.addTagRuleBundle(new Sm2TagRuleBundle());
    }
}

通过sitemesh3.xml中的XML配置:

<sitemesh>
    <content-processor>
        <tag-rule-bundle class="org.sitemesh.content.tagrules.html.Sm2TagRuleBundle" />
    </content-processor>
    <!-- Your mappings go here -->
    <mapping ... />
</sitemesh>

执行此操作可以使用以下内容标记:

<content tag="heading"></content>

在装饰器/模板页面中,使用sitemesh:write标签而不是sitemesh:getProperty标签不再存在:

<sitemesh:write property="page.heading"/>