Sitemesh 3中的多个身体标签

时间:2012-11-06 12:08:21

标签: java freemarker sitemesh

我一直在使用Sitemesh 3作为我的项目,到目前为止它一直很好用。最近我遇到了一个被卡住的情况。

我的最终视图必须由2个html文件组成,两者都有自己的标签。 文件1:

<html>
    <head>Head1</head>
    <body>body1</body>
</html>

文件2:

<html>
    <head>Head2</head>
    <body>body2</body>
</html>

我使用freemarker include标签撰写视图。因此,组合HTML看起来像:

<html>
    <head>Head1</head>
    <body>body1</body>
</html>
<html>
    <head>Head2</head>
    <body>body2</body>
</html>

以下是我的装饰师:

<html>
<head>
    <sitemesh:write property='head'/>
</head>
<body>
    <div class="container">
        <sitemesh:write property='body'/>
    </div>
</body>
</html>

但是一旦装饰完毕,我得到的最终结果就是:

<html>
<head>
    <head>Head1</head>
</head>
<body>
    <div class="container">
        <body>body1</body>
    </div>
</body>
</html>

但预期的输出是

<html>
<head>
    <head>
        Head1
        Head2
    </head>
</head>
<body>
    <div class="container">
            body1
            body2
    </div>
</body>
</html>

我遇到了similar question,但该解决方案对我不起作用,因为我不想创建多个装饰器。

我只是想知道它是否可以在Sitemesh 3中使用。如果是,那么如何。

感谢。

1 个答案:

答案 0 :(得分:2)

如果您不介意扩展Sitemesh 3,那么通过在装饰器模板中添加对服务器端包含的支持,这很容易实现。我在另一个库(UtterlyIdle)中完成了这个。

我使用StringTemplate作为我的装饰器语言,但这应该在Freemarker或任何其他模板工具中使用。我添加了PageMap然后在我的装饰模板调用

$include("someUrl").body$

这包括然后使用Sitemesh 3引擎解析输出。这允许您拥有任意数量的包含。

希望有意义