我们可以通过webwork的result类型freemarker来呈现Freemarker页面. 或者dispacther 结果类型加上WebWork的FreemarkerServlet来呈现.
这篇文档主要讲使用freemarker结果类型, 因为它是被推荐使用的. 下面也有将如何使用FreemarkerServlet
h3. 配置你的action使用freemarker结果类型
Freemarker结果类型定义在webwork-default.xml中, 所以正常情况下你只需要include它,然后把你的结果的type属性设置为freemarker
{code:XML}
...
...
{code}
h3. 属性获取
你的action的属性会被自动的获取- 就像velocity页面一样
{*}例如{*}$\{name}会调用stack.findValue("name"), 其实背后通常又是调用action.getName().
获取变量有一个搜索过程, 顺序搜索以下范围,直到找到需要的值:
* freemarker variables
* value stack
* request attributes
* session attributes
* servlet context attributes
h3. 上下文环境中的变量
The following variables exist in the freemarer views
在Freemarker页面中存在如下变量:
* req - 当前的HttpServletRequest对象
* res - 当前的HttpServletResponse对象
* stack - 当前的OnglValueStack对象
* ognl - OgnlTool 实例
** 这个类由一些有用的方法可以直接执行OGNL表达式, 和一个方法可以生成一个模式选择列表 (例如, 取得list属性的名字, 一个listKey和listValue)
* webwork - FreemarkerWebWorkUtil实例
* action - 当前的WebWork的action对象
* exception - 可选的异常实例, 如果视图是一个JSP异常或者Servlet异常视图
h3. 最近的发行版(2.1以后)中的Freemarker配置
要配置webwork用的freemarker引擎, 只需要在classpath下添加一个freemarker.properties文件.支持的属性都是freemarker的配置对象 - 可以在freemarker的文档中查找到.这些属性可以同时给freemarker结果类型和webwork的FreemarkerServlet使用.
{code}
default_encoding=ISO-8859-1
template_update_delay=5
locale=no_NO
{code}
h3. 使用webwork UI标签 - 或者JSP标签库
Freemarker有直接使用任何JSP标签库的能力. 你可以在Freemarker中使用JSP标签库即使
a) 你的Servlet容器不支持JSP, 或
b) 你没有在web.xml中配置标签库- 注意下面的例子中我们如何引用一个标签库定义文件的,这个文件是基于webapp的绝对URL, 所以不需要在web.xml中配置
{code}
<>
{code}
注意: 标签数值属性必须是数字, 不是字符. 像上面的rows和cols属性, 如果你使用cols="40" 你会得到一个异常.除此之外freemarker标签的容器和你想象的一样. 译者注: 如果你用ww2.2以后的版本, 就像用JSP标签一样就可以了,不用像上述的那样.
注意: 标签数值属性必须是数字, 不是字符. 像上面的rows和cols属性,如果你使用cols="40" 你会得到一个异常. 除此之外freemarker标签的容器和你想象的一样. {color:red}译者注:如果你用ww2.2以后的版本, 就像用JSP标签一样就可以了, 不用像上述的那样.{color}
h2. 使用FreemarkerServlet
freemarker.jar中提供的FreemarkerServlet可以被拿出来单独使用, 尽管如此, 它不提供任何webwork独有的功能, 如环境变量, 属性获取等. 因此webwork提供自己的Servlet来支持这一整合.
h3. 在web.xml中注册FreemarkerServlet
要使用freemarker作为表现层技术, 必须配置webwork2的FreemarkerServlet, 映射你的模版用的文件的扩展名.
{code:XML}
freemarker
{code}
h3. 配置Actions来用这个Servlet(xwork.xml配置)
要使用Freemarker页面, 只需要用dispatcher结果类型, 指定location为模版文件位置
{code:XML}
{code}
h3. 扩展这个Servlet
注意: 这个文档需要修订, 因为在完成时FreemarkerServlet已经改变了.
Freemarker Servlet的详细信息可以到freemarker站点上查看
小心当扩展com.opensymphony.webwork.views.freemarker.FreemarkerServlet, 重写
{code}
protected TemplateModel createModel(
ObjectWrapper wrapper,
ServletContext servletContext,
HttpServletRequest request,
HttpServletResponse response)
{code}
调用super.createModel(...)方法, 然后用新模型包装以解决action的属性获取问题