我应该如何在Sitemesh 3模板中填充页面标题?

时间:2013-07-26 18:37:19

标签: spring-mvc freemarker sitemesh

我在Spring MVC应用程序中使用Sitemesh 3和Freemarker。 Freemarker页面输出传递给Sitemesh以应用JSP装饰器(一旦我将我的配置整理出来将是FTL - 我还有另外一个关于这个问题的问题 - 尚未答复)。

我已经让Sitemesh 3正确地将正文应用于模板,现在我想添加到我的设置中,以便FTL视图可以设置将在页面标题中呈现的属性。

Sitemesh(JSP)模板/装饰器 - 这产生了正确的输出,但变量内容标题除外:

    <div id="mainWrapper">
    <div id="content">
        <div id="contentheading"><sitemesh:write property="page.heading"></sitemesh:write></div>
        <div>
            <sitemesh:write property='body'/>
        </div>
    </div>
</div>

我需要在.ftl中做些什么才能创建一些将在div#contentheading元素中呈现的属性?

我使用自定义过滤器实现为sitemesh提供了Java配置:

public class SitemeshFilter extends ConfigurableSiteMeshFilter {
@Override
protected void applyCustomConfiguration(SiteMeshFilterBuilder builder) {
    builder.setMimeTypes("text/html", "application/xhtml+xml");
    builder.addDecoratorPath("/*", "/WEB-INF/templates/page.jsp");
  }
}

请注意我使用的是Sitemesh 3

1 个答案:

答案 0 :(得分:1)

执行此操作的简单方法是,在FTL视图中使用 标记,不需要额外的SiteMesh配置。默认的SiteMesh 3标记处理器会自动解析这些标记,并使用“ meta。”前缀将它们提供给装饰者。

FTL视图:

<html>
  <head>
    <title>Some title</title>
    <meta name="heading" content="My page heading">
    ...
  </head>
  <body>
    ...
  </body>
</html>

然后在你的装饰者:

<html>
  ...
  <div id="content">
    <div id="contentHeading"><sitemesh:write property="meta.heading"/></div>
    ....
  </div>
  ...