在本文中,我将向您展示如何在JEE网站中使用SiteMesh ,以使其具有统一感。
在谈论模板时,每个人最初使用的方法是在整个JSP页面中使用<@include>
标记。 由于所有JSP都负责调用include,因此此操作过程从一开始就是有缺陷的,因此,没有真正的强制措施来使用正确的JSP。
最常用的方法是Apache Tiles。 坦率地说,我没有看过Tiles,因为它是从Struts迁移到Apache的。 Struts Tiles应该与Struts结合使用。 Apache Tiles似乎支持更多技术(JSP,Velocity,Freemarker等),但是我似乎没有开箱即用的JSF支持,尽管似乎有很多文章讨论了该主题及其问题。
当我使用Struts Tiles时,我发现它是一个非常强大的框架,但是许多初级开发人员都遇到了一些问题。 在我从事的大多数项目中,一位高级开发人员会组装图块,而初级的则由他们自己创建页面。 我发现Tiles是可配置的,但这是以复杂性为代价的。 在大多数情况下,我并不需要Tiles的所有功能:我只想在首页周围精心制作一个页眉,页脚和菜单。
在研究AppFuse时 ,我偶然发现了一个很好的模板工具,即SiteMesh。 SiteMesh是技术中立的,这意味着它可以与使用的任何视图框架( 包括JSF )一起使用。 它基于servlet过滤器的非常简单的概念。 XML文件构成模板配置的基础。 此配置包含装饰哪些页面以及使用哪些模板。
建立了模板机制,因此,无论是独立查看还是通过过滤器查看,每个页面都被视为完整的页面。 例如,当您正常书写页面时,您将提供标题的文本(大多数浏览器的标题栏中显示的内容)。 如果您使用的是SiteMesh,则没有任何变化。 在运行时,尽管页面设计会有所不同,但Servlet过滤器会从源HTML(可以来自动态源)读取标题的文本值,并输出具有相同标题的文本值的修饰页面。
以下示例显示了如何在模板中实现它:
<html>
<head> ... </head>
<body>
<divid="top"> Header </div>
<h1><decorator:getPropertyproperty="title"/></h1>
...
</body>
<html>
没有什么比这更简单了。 但是,该解决方案使独立视图与装饰视图分离。 前者无需了解后者!
一个常见的用例是将常见CSS和JavaScript声明放入模板中。
此外,使用哪种装饰器的选择可以来自不同的策略:
- 配置文件,
- 饼干,
- 浏览器语言
- 显示代理(浏览器或打印机),
- 等等
如果我有简单的模板需求,该解决方案的简单性和鲁棒性将使我深刻考虑使用它。 在相对的站点上,如果您有复杂的模板要求,SiteMesh将远远不够。
您将在这里找到Maven / Eclipse格式的非常简单的项目。
翻译自: https://blog.frankel.ch/simple-templating-solution-with-sitemesh/