Apache Tiles的更好替代品

Fix*_*xus 17 java spring web-frameworks spring-mvc apache-tiles

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

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

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

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

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

Nei*_*gan 15

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

以下是如何设置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>
Run Code Online (Sandbox Code Playgroud)

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

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

在您的模板中,添加:

<c:set var="titleKey"><tiles:getAsString name="titleKey" /></c:set>
Run Code Online (Sandbox Code Playgroud)

<title><spring:message code="${titleKey}"/></title>
Run Code Online (Sandbox Code Playgroud)

ReloadableResourceBundleMessageSourcebean 添加到servlet应用程序上下文中.

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

index.title = Welcome to Acme, Inc.
contact-us.title = Contact Us
Run Code Online (Sandbox Code Playgroud)

  • +1.非常有用,但是如果你有多个default.jsp模板怎么办?瓷砖不知道如何用通配符来区分它们,对吧?就像OP的情况一样,他有两个模板.(我意识到在他的情况下他可以做一个忽略,但这并不总是你想做的事情.) (4认同)

Ral*_*lph 7

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

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

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


小智 7

(与类似)

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

这种样板配置是瓷砖挂起1天.引入通配符时,实际上没有必要使用tiles-2,特别是使用tiles-3和OptionsRenderer.

这是一个可以帮助您的教程

  • 弹簧与瓷砖整合,
  • 带通配符的定义,
  • 使用OptionsRenderer实现回退模式,和
  • 定义组成.


Fix*_*xus 5

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

  • 您无法将一个MVC框架与另一个MVC框架相结合.这是对想法的误解.JSF是与Spring MVC相同的MVC框架.你最有可能用JSF MVC编写Spring.这里描述了更好的解释:http://stackoverflow.com/questions/18744910/using-jsf-as-view-technology-of-spring-mvc (3认同)