花了一天学习FreeMarker和Sitemesh,现在把练习时候碰到的问题总结下,可以为以后做参考,也可以把小小的经验共享给大家。我是参照李刚的《struts2权威指南》做的,不过有些细节书中有所遗漏,经过查了http://opensymphony.com/后,才得以正常运行。
第一步:需要相应的包加入到项目路径中,如freemarker-2.3.8.jar,sitemesh-2.4.jar,struts2-sitemesh-plugin-2.0.14.jar。
第二步:修改Web.xml。
注意:过滤器ActionContextCleanUp、FreeMarkerPageFilter、FilterDispatcher顺序不能调换,具体原因请查看文档。
第三步:struts-tag.tld到WEB-INF目录下。如果使用JSP作为表现层,则不需要,但如果使用FreeMarker就需要,因为不会自动加载。
在FreeMarker中使用Sitemesh标签,需把sitemesh-page.tld放到WEB-INF目录下,在FreeMarker模板中添加<#assign page=JspTaglibs["/WEB-INF/sitemesh-page.tld"] />。
也把sitemesh.xml放到该目录下,注意<property name="decorators-file" value="/WEB-INF/decorators.xml "/>。
创建decorators.xml,路径是sitemesh.xml中<property>标签的value值。因为目前此值是/WEB-INF/decorators.xml,所以应该在WEB-INF目录下。
decorators.xml:
注意:aultdir的值指明sitemesh的装饰页面的目录是在WEB-INF/decorators文件夹下。即main.ftl和panel.ftl在此目录下。当然可以更改到其他目录。
如果系统中要有多个装饰模板,则可以在这定义,如下:
<decorator name="main" page="main.ftl">
<pattern>/*</pattern>
</decorator>
<pattern>标签定义了应用于此装饰模板的页面。在这里将所有的页面都被main.ftl装饰。
Struts.xml的内容就不再这里提了。<result>的type属性为freemarker即可。