WebWork2.2新特性使用FreeMarker的FTL做装饰页面
2009-04-30 11:55
507 查看
WebWork2.2新特使用FreeMarker的FTL做装饰页面
其实我不善于写作,有些东西仅仅是写下来.还可以提醒自己.
人生"入"梦,各位一定要保重身体.
注意:FreeMarkerPageFilter是2.2beta发布后才加到CVS上的,所以从CVS获取新的代码才能看到这个filter,同目录下还有一个VelocityPageFilter.
FreeMarkerPageFilter以及VelocityPageFilter都是Sitemesh页面装饰器中PageFilter的扩展,有了它,可以直接使用FreeMarker的ftl作为装饰页面,可以不在使用SiteMesh带的FreemarkerDecoratorServlet了,而且还可以享受Action中的ValueStack了.
不过我不推荐在装饰页面中使用ValueStack中的值,因为装饰页面对应的Action是不确定的,而且也可能修饰的是一个普通页面,不是一个Action.
我们要有一个Action及其结果页面,或者一个简单的页面,这些不在赘述,自己看自己的了.
首先我们有一个装饰页面,示例如下(main.ftl):
<html>
<head>
<title>JScud Develop:${page.title}</title>
${page.head}
</head>
<body>
${page.body}
<br><br>
From: ${base} by <@ww.text name="copyright"/>
</body>
</html>
我们可以看到,其中的标记都有page前缀,而不是直接使用body,title等,原因是这个FreeMarkerPageFilter只把page放到了FreeMarker的model中,如果你还是想遵循原来的习惯,那么自己继承一下FreeMarkerPageFilter即可,非常简单,然后把body,title,head放到model中即可.不过我觉得现在也挺好,省得变量太短和别的混淆.
SiteMesh的decorators.xml示例如下:
<?xml version="1.0" encoding="ISO-8859-1"?>
<decorators defaultdir="/decorators">
<decorator name="main" page="main.ftl">
<pattern>/*</pattern>
</decorator>
</decorators>
我们还需要在web.xml中配置过滤器,在这个地方,我走了弯路,因为没有文档,结果没有注意到 ActionContextCleanUp 这个Filter,自己还自作聪明修改了一下FreeMarkerPageFilter,后来才发现ActionContextCleanUp这个Filter的作用,这都是没有仔细看源码(JavaDoc)的后果啊.
在不使用SiteMesh的时候,为了使用WebWork,我们只需要在web.xml配置FilterDispatcher一个过滤器即可,阅读一下FilterDispatcher的JavaDoc和源码,我们可以看到它调用了:
finally
{
ActionContextCleanUp.cleanUp(req);
}
而且JavaDoc中也提到看ActionContextCleanUp的文档,那我们就去看吧(我没看所以...)
在ActionContextCleanUp中,有这样的代码:
req.setAttribute(CLEANUP_PRESENT, Boolean.TRUE);
如果FilterDispatcher检测到这个属性,就不会清除ActionContext中的内容了,而由ActionContextCleanUp后续的代码来清除,保证了一系列的Filter访问正确的ActionContext.
文档中提到,如果用到SiteMesh的Filter或者其他类似Filter,那么设置顺序是:
ActionContextCleanUp filter
SiteMesh filter
FilterDispatcher
所以最后我们的web.xml应该类似这样:
<filter>
<filter-name>ActionContextCleanUp</filter-name>
<filter-class>com.opensymphony.webwork.dispatcher.ActionContextCleanUp</filter-class>
</filter>
<filter>
<filter-name>sitemesh</filter-name>
<filter-class>com.opensymphony.webwork.sitemesh.FreeMarkerPageFilter</filter-class>
</filter>
<filter>
<filter-name>webwork</filter-name>
<filter-class>com.opensymphony.webwork.dispatcher.FilterDispatcher</filter-class>
</filter>
<filter-mapping>
<filter-name>ActionContextCleanUp</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<filter-mapping>
<filter-name>sitemesh</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<filter-mapping>
<filter-name>webwork</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
发布程序,运行结果正常.在Action改变Locale,装饰页面也获取了正确的Locale,OK,大功告成...嘿嘿
来源:http://blog.sina.com.cn/s/blog_5b142cae0100cmy2.html~type=v5_one&label=rela_prevarticle
其实我不善于写作,有些东西仅仅是写下来.还可以提醒自己.
人生"入"梦,各位一定要保重身体.
注意:FreeMarkerPageFilter是2.2beta发布后才加到CVS上的,所以从CVS获取新的代码才能看到这个filter,同目录下还有一个VelocityPageFilter.
FreeMarkerPageFilter以及VelocityPageFilter都是Sitemesh页面装饰器中PageFilter的扩展,有了它,可以直接使用FreeMarker的ftl作为装饰页面,可以不在使用SiteMesh带的FreemarkerDecoratorServlet了,而且还可以享受Action中的ValueStack了.
不过我不推荐在装饰页面中使用ValueStack中的值,因为装饰页面对应的Action是不确定的,而且也可能修饰的是一个普通页面,不是一个Action.
我们要有一个Action及其结果页面,或者一个简单的页面,这些不在赘述,自己看自己的了.
首先我们有一个装饰页面,示例如下(main.ftl):
<html>
<head>
<title>JScud Develop:${page.title}</title>
${page.head}
</head>
<body>
${page.body}
<br><br>
From: ${base} by <@ww.text name="copyright"/>
</body>
</html>
我们可以看到,其中的标记都有page前缀,而不是直接使用body,title等,原因是这个FreeMarkerPageFilter只把page放到了FreeMarker的model中,如果你还是想遵循原来的习惯,那么自己继承一下FreeMarkerPageFilter即可,非常简单,然后把body,title,head放到model中即可.不过我觉得现在也挺好,省得变量太短和别的混淆.
SiteMesh的decorators.xml示例如下:
<?xml version="1.0" encoding="ISO-8859-1"?>
<decorators defaultdir="/decorators">
<decorator name="main" page="main.ftl">
<pattern>/*</pattern>
</decorator>
</decorators>
我们还需要在web.xml中配置过滤器,在这个地方,我走了弯路,因为没有文档,结果没有注意到 ActionContextCleanUp 这个Filter,自己还自作聪明修改了一下FreeMarkerPageFilter,后来才发现ActionContextCleanUp这个Filter的作用,这都是没有仔细看源码(JavaDoc)的后果啊.
在不使用SiteMesh的时候,为了使用WebWork,我们只需要在web.xml配置FilterDispatcher一个过滤器即可,阅读一下FilterDispatcher的JavaDoc和源码,我们可以看到它调用了:
finally
{
ActionContextCleanUp.cleanUp(req);
}
而且JavaDoc中也提到看ActionContextCleanUp的文档,那我们就去看吧(我没看所以...)
在ActionContextCleanUp中,有这样的代码:
req.setAttribute(CLEANUP_PRESENT, Boolean.TRUE);
如果FilterDispatcher检测到这个属性,就不会清除ActionContext中的内容了,而由ActionContextCleanUp后续的代码来清除,保证了一系列的Filter访问正确的ActionContext.
文档中提到,如果用到SiteMesh的Filter或者其他类似Filter,那么设置顺序是:
ActionContextCleanUp filter
SiteMesh filter
FilterDispatcher
所以最后我们的web.xml应该类似这样:
<filter>
<filter-name>ActionContextCleanUp</filter-name>
<filter-class>com.opensymphony.webwork.dispatcher.ActionContextCleanUp</filter-class>
</filter>
<filter>
<filter-name>sitemesh</filter-name>
<filter-class>com.opensymphony.webwork.sitemesh.FreeMarkerPageFilter</filter-class>
</filter>
<filter>
<filter-name>webwork</filter-name>
<filter-class>com.opensymphony.webwork.dispatcher.FilterDispatcher</filter-class>
</filter>
<filter-mapping>
<filter-name>ActionContextCleanUp</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<filter-mapping>
<filter-name>sitemesh</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<filter-mapping>
<filter-name>webwork</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
发布程序,运行结果正常.在Action改变Locale,装饰页面也获取了正确的Locale,OK,大功告成...嘿嘿
来源:http://blog.sina.com.cn/s/blog_5b142cae0100cmy2.html~type=v5_one&label=rela_prevarticle
相关文章推荐
- freemarker使用中,如何解决ftl页面自动去除属性值中间空格
- WebWork2.2新特性之异常映射/全局异常映射(有异常的页面显示)
- WebWork2.2新特性:使用国际化拦截器
- 在页面中使用WebWork的token标签解决表单重复提交问题
- Spring Boot使用freemarker并且生成静态html页面
- 在Webwork中使用ww:action实现页面控制器风格Action复用
- html5新特性:利用history的pushState等方法来解决使用ajax导致页面后退和前进的问题
- WebWork2.2新特性: AJAX之Remote Form (转载)
- FreeMarker的FTL页面中include引用UTF-8文件导致错位的问题处理
- html5新特性:利用history的pushState等方法来解决使用ajax导致页面后退和前进的问题
- html5新特性:利用history的pushState等方法来解决使用ajax导致页面后退和前进的问题
- springboot 在ftl页面上使用shiro标签的实例代码
- android2.2中默认浏览器无法使用手势放大缩小页面的问题定位
- 在页面中使用WebWork的token标签解决表单重复提交问题
- Freemarker 页面静态化技术使用入门案例
- springboot-10-前端页面整合, thymeleaf, freemarker, jsp 模板使用
- html5新特性:利用history的pushState等方法来解决使用ajax导致页面后退和前进的问题
- html5新特性:利用history的pushState等方法来解决使用ajax导致页面后退和前进的问题
- 在Webwork中使用ww:action实现页面控制器风格Action复用
- 使用freemarker(FTL)常见语法 总结