使用Apache Tiles包含tile的一部分?

时间:2011-07-08 16:43:08

标签: jsp partial-views velocity tiles freemarker

我在使用Tiles时遇到了困难。

我有一个包含很多视图的webapp,所有这些都是围绕一个模板组成的。模板有大约三个或四个“占位符”,对于每个视图,不同的动态生成的内容应放在正确的占位符中。

当我用Tiles定义一个新视图时,我需要创建多个JSP文件 - 每个文件都有一个占位符的内容。然后我需要更新一个巨大的XML文件,其中包含大量看起来相同的条目。

我正在寻找一个解决方案,允许我在同一个文件中声明所有这些占位符的内容,并将此文件部分包含在模板中(每个片段都包含在其占位符中)。

我也在关注Velocity和FreeMarker,但其中任何一个似乎都没有部分包含功能。

我有什么选择?我愿意考虑改变框架,以使创建另一种观点变得有点乏味。

谢谢!

1 个答案:

答案 0 :(得分:0)

我相信你的xml文件很大的原因是你可能没有扩展默认模板,如下所示

这应该是您的基本模板:

<definition name="app.base" template="/WEB-INF/templates/default.jsp">
   <put-attribute name="title" value="Not Found" />
   <put-attribute name="header" value="/WEB-INF/tiles/header.jsp" />
   <put-attribute name="body" value="/WEB-INF/tiles/body.jsp" />
   <put-attribute name="footer" value="/WEB-INF/tiles/footer.jsp" />
   <put-list-attribute name="stylesheets">
        <add-attribute value="/static/public/css/bootstrap.min.css" />          
        <add-attribute value="/static/protected/css/header.css" />
        <add-attribute value="/static/protected/css/footer.css" />
   </put-list-attribute>
   <put-list-attribute name="javascripts">
        <add-attribute value="/static/public/js/jquery-2.1.4.min.js" />
        <add-attribute value="/static/public/js/bootstrap.js" />
   </put-list-attribute>    
</definition>

现在你有了一个基本模板,你可以按照以下方式扩展它:

<definition name="home" extends="app.base">
   <put-attribute name="title" value="Home Page" />
   <put-attribute name="body" value="/WEB-INF/tiles/home.jsp" />
   <put-list-attribute name="stylesheets" inherit="true">
       <add-attribute value="/static/protected/css/whatever.css" />
   </put-list-attribute>
</definition>

此新页面将包含应用程序库和主页的css样式表

这有帮助吗?