Apache Tiles的更好替代品

时间:2012-03-17 08:33:39

标签: java spring spring-mvc web-frameworks apache-tiles

我正在寻找一个比Apache Tiles更好更容易使用的框架(到目前为止,我已经使用了几次)。

使用Tiles,似乎当我有100个动作时,我需要创建100个jsp文件并在tiles.xml中创建100个定义。

是否有更好的框架来管理我的模板?我想创建,例如,2个模板:

a)内容的菜单和列
b)菜单,内容栏,带横幅的右栏

在两个模板中,菜单都是常量。在template b中,右列是常量,因此只有内容列不同。对于这个简单示例,我 不希望 定义扩展template a的每个JSP文件(仅提供正文)。那是跛脚的imo。或许我很蹩脚,我可以在Apache Tiles中定义一个DEFAULT模板,我只是没有正确使用它。无论如何,所有帮助都表示赞赏。

5 个答案:

答案 0 :(得分:15)

总的来说,我会推荐SiteMesh而不是Tiles。

Here's如何设置SiteMesh 3

您可以将Tiles用于页内模板,但可以将SiteMesh用于站点范围的模板。尽管如此...

如何让Tiles吸得更少:

  1. 使用约定优于配置。例如,将您的定义放在webapp/WEB-INF/tiles.xml中,并且无需告诉磁贴它在哪里。

  2. 使用通配符:

  3. <definition name="default" template="/WEB-INF/templates/default.jsp">
        <put-attribute name="titleKey" value=""/>
        <put-attribute name="body" value=""/>
    </definition>
    
    <definition name="*" extends="default">
        <put-attribute name="titleKey" value="{1}.title"/>
        <put-attribute name="body" value="/WEB-INF/views/{1}.jsp" />
    </definition>
    

    如果您的控制器返回视图名称index,它将匹配定义*,并使用JSP文件/WEB-INF/views/index.jsp作为正文,并使用消息属性index.title

    如果您的控制器返回视图名称contact-us,它将匹配定义*,并使用JSP文件/WEB-INF/views/contact-us.jsp作为正文,并使用消息属性contact-us.title

    在模板中,添加:

    <c:set var="titleKey"><tiles:getAsString name="titleKey" /></c:set>
    

    <title><spring:message code="${titleKey}"/></title>
    

    ReloadableResourceBundleMessageSource bean添加到servlet应用程序上下文中。

    制作文件/src/main/resources/messages.properties,内容如下:

    index.title = Welcome to Acme, Inc.
    contact-us.title = Contact Us
    

答案 1 :(得分:7)

另一种方法是Sitemesh。 它被设计为网格视图,您无法修改原始视图,因此它更像是一个html转换/装饰框架,而不是像Tiles这样的模板框架。

在我个人看来,Tiles是更好的应用方法,我会尝试实现某种解析器(基于一些命名约定),使xml文件过时,但这不是问题。< / em>的

@See:This old introductions显示了SiteMesh的工作原理。

答案 2 :(得分:7)

(类似于this

您不需要为每个操作定义。

此样板配置是瓷砖挂起1天。引入通配符时,tile-2实际上没有必要,尤其是tile-3和OptionsRenderer。

这是一个可以帮助您的tutorial

  • spring to tiles integration,
  • 带通配符的定义,
  • 使用OptionsRenderer和
  • 实现回退模式
  • 定义组成。

答案 3 :(得分:5)

我最终使用了JSF + Facelets。我将它们与Spring MVC结合起来,就像一个魅力。

答案 4 :(得分:-2)

根据经验,我强烈推荐Apache Wicket。