我正在寻找一个比Apache Tiles更好、更容易使用的框架(到目前为止,我已经用过几次了)。
使用Tiles,似乎当我有100个操作时,我需要在tiles.xml
中创建100个jsp文件和100个定义。
有没有更好的框架来管理我的模板?例如,我想创建两个模板:
a)内容的菜单和栏
b)菜单、内容栏、带有横幅的右栏
在这两个模板中,菜单都是恒定的。在template b
中,右边的列是常量,所以只有内容列是不同的。对于这个简单的示例,我不想定义每个扩展template a
的文件(只是为了提供一个主体)。这太差劲了。或者,也许我很差劲,我可以在Apache Tiles中定义一个默认模板,但我没有正确使用它。在任何情况下,感谢所有的帮助。
发布于 2012-03-23 21:24:42
我最终使用了JSF + Facelets。我将它们与Spring MVC结合在一起,它就像一个魔法师。
发布于 2014-06-25 04:29:03
总的来说,我会推荐SiteMesh而不是Tiles。
Here's如何设置SiteMesh 3
您可以对页面内模板使用磁贴,但对站点范围的模板使用SiteMesh。然而..。
如何让瓷砖看起来不那么糟糕:
webapp/WEB-INF/tiles.xml
中,无需告知切片的位置。
<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>
将servlet bean添加到ReloadableResourceBundleMessageSource
应用程序上下文中。
创建一个/src/main/resources/messages.properties
文件,内容如下:
index.title = Welcome to Acme, Inc.
contact-us.title = Contact Us
发布于 2012-03-17 18:54:39
另一种方法是Sitemesh。它被设计成网格视图,在那里你不能修改原始视图,所以它更像是一个html转换/装饰框架,而不是一个像Tiles这样的模板框架。
在我个人看来,Tiles是更好的应用程序方法,我会尝试实现某种解析器(基于一些命名约定),使xml文件过时,但这不是问题所在。
@See:This old introductions展示了SiteMesh是如何工作的。
https://stackoverflow.com/questions/9748481
复制相似问题