Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1065538
  • 博文数量: 282
  • 博客积分: 10865
  • 博客等级: 上将
  • 技术积分: 2480
  • 用 户 组: 普通用户
  • 注册时间: 2006-05-12 12:35
文章存档

2017年(1)

2016年(3)

2015年(10)

2014年(12)

2013年(5)

2012年(10)

2011年(29)

2010年(3)

2008年(13)

2007年(92)

2006年(104)

我的朋友

分类: Java

2007-04-22 18:28:57

h1. WebWork中的Freemarker支持
   
  我们可以通过webwork的result类型freemarker来呈现Freemarker页面. 或者dispacther 结果类型加上WebWork的FreemarkerServlet来呈现.
   
  这篇文档主要讲使用freemarker结果类型, 因为它是被推荐使用的. 下面也有将如何使用FreemarkerServlet
   
   
  h3. 配置你的action使用freemarker结果类型
   
  Freemarker结果类型定义在webwork-default.xml中, 所以正常情况下你只需要include它,然后把你的结果的type属性设置为freemarker
   
  {code:XML}
   
 
  ...
 
  /WEB-INF/views/testView.ftl
 

  ...
  {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}
  <#assign ww=JspTaglibs["/WEB-INF/webwork.tld"] />
   
  <@ww.form method="'post'" name="'inputform'" action="'save.action'" >
  <@ww.hidden name="'id'" />
  <@ww.textarea label="'Details'" name="'details'" rows=5 cols=40 />
  <@ww.submit value="'Save'" align="center" />
  <>
  {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
  com.opensymphony.webwork.views.freemarker.FreemarkerServlet
 

   
 
  freemarker
  *.ftl
 

  {code}
   
  h3. 配置Actions来用这个Servlet(xwork.xml配置)
   
  要使用Freemarker页面, 只需要用dispatcher结果类型, 指定location为模版文件位置
   
  {code:XML}
 
  /WEB-INF/views/testView.ftl
 

  {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的属性获取问题
阅读(1407) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~