【问题标题】:Better alternative to Apache TilesApache Tiles 的更好替代品
【发布时间】:2012-04-02 15:47:41
【问题描述】:

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

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

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

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

在这两个模板中,菜单都是不变的。在template b中,右列是不变的,所以只有内容列不同。对于这个简单的示例,我不想定义每个扩展 template a 的 JSP 文件(只是为了提供一个正文)。那是蹩脚的imo。或者也许我很蹩脚,我可以在 Apache Tiles 中定义一个 DEFAULT 模板,但我只是没有正确使用它。无论如何,感谢所有帮助。

【问题讨论】:

  • 我认为在您的情况下,sitemesh 可能是一种更好的方法,因为您需要的很简单,只需两个模板。设置完成后,您就可以忘记它了。

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


【解决方案1】:

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

Here's如何设置SiteMesh 3

您可以将 Tiles 用于页面内模板,但将 SiteMesh 用于站点范围的模板。不过……

如何让 Tiles 吸得更少:

  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>

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

如果你的控制器返回视图名称contact-us,它将匹配定义*,并使用JSP文件/WEB-INF/views/contact-us.jsp作为body,并使用消息属性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。非常有帮助,但是如果您有多个 default.jsp 模板怎么办?瓷砖不知道如何用通配符区分它们,对吧?就像在 OP 的情况下,他有两个模板。 (我意识到在他的情况下他可以忽略,但这并不总是你想做的事情。)
【解决方案2】:

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

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

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

【讨论】:

  • 好的,但我希望有一个带有这种解析器的模板引擎。有这样的吗?
  • 我不知道,但我希望解析器解析视图的方式是高度依赖于应用程序的,另一方面我希望编写一个并不难。
  • 是的,Tiles-3 具有您提到的解析能力。查看教程……(tech.finn.no/the-ultimate-view-tiles-3
【解决方案3】:

(类似于this

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

这个样板配置是从 tile-1 天开始的。当引入通配符时,对于tiles-2 确实没有必要,尤其是对于tiles-3 和OptionsRenderer。

这里有一个tutorial 可以帮助你

  • spring to tile 集成,
  • 带有通配符的定义,
  • 使用 OptionsRenderer 实现回退模式,以及
  • 定义组合。

【讨论】:

    【解决方案4】:

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

    【讨论】:

    • 您不能将一个 MVC 框架与另一个结合起来。这是对想法的误解。 JSF 是与 Spring MVC 相同的 MVC 框架。您很可能使用 JSF MVC 编写 Spring。此处描述了更好的解释:stackoverflow.com/questions/18744910/…
    【解决方案5】:

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

    【讨论】:

    • 您能否详细说明为什么会这样?
    猜你喜欢
    • 1970-01-01
    • 2021-06-30
    • 1970-01-01
    • 2013-09-05
    • 2016-01-24
    • 1970-01-01
    • 2011-07-19
    • 2012-12-26
    • 2011-08-20
    相关资源
    最近更新 更多