Apache Tiles的更好替代品

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

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

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

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

在这两个模板中,菜单都是常量。在 中,右列是常量,因此只有内容列不同。对于这个简单的例子我不想定义每个扩展的JSP文件(只是为了提供一个正文)。这是蹩脚的伊莫。或者也许我很瘸腿,我可以在Apache Tiles中定义一个DEFAULT模板,但我只是没有正确使用它。无论如何,所有帮助都值得赞赏。template btemplate a


答案 1

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

以下是设置 SiteMesh 3 的方法

您可以将磁贴用于页面内模板,但将 SiteMesh 用于网站范围的模板。不过。。。

如何使瓷砖不那么烂:

  1. 使用约定而不是配置。例如,输入您的定义,无需告诉磁贴它的位置。webapp/WEB-INF/tiles.xml

  2. 使用通配符:

<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>

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

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

在模板中,添加:

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

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

将 Bean 添加到您的 servlet 应用程序上下文中。ReloadableResourceBundleMessageSource

创建一个文件,其中包含以下内容:/src/main/resources/messages.properties

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

答案 2

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

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

@See:这个旧的介绍显示了SiteMesh的工作原理。


推荐