技术开发 频道

进一步提升 Struts 2 对 Velocity 的支持力度



【IT168 技术文档】

    Struts 2 是 Struts 框架的一个全新版本,它废弃了原有 Struts 1.x 的框架结构,在 WebWork 的基础上全面提升了代码的配置灵活性、可测试性以及超强的扩展性。Struts 2 更是提供了对 Velocity 和 FreeMarker 模板引擎的支持,这破天荒的举动大大的方便了 Velocity 和 FreeMarker 的开发者,从而也更有效的推动了模板技术的发展。

在进行 Struts 2 和 Velocity 结合的试验中发现下面几个问题:

  1. 与 VelocityTools 1.3 存在兼容性问题;
  2. 不支持 Velocity Layout;
  3. 处理 velocity 模板时存在编码问题;

    好在由于 Struts 2 的超强扩展性,使得这三个问题的解决变得非常简单,而且我们无需修改 Struts 2 的源码,下面分别给出三个问题的解决办法。

第一个问题:与 VelocityTools 1.3 存在兼容性问题

    这个问题是因为 VelocityTools 这个项目从 1.2 升级到 1.3 时修改了一些类的方法(Method)导致的。在 1.3 这个版本中 ToolboxManager 类的 getToolboxContext 方法改名为 getToolbox,因此在启动程序的时候就会报 getToolboxContext 方法没找到的异常。

    Struts 2 是在 VelocityManager 类的 createContext 方法中调用 ToolboxManager 的,而 Struts 2 允许通过配置来修改 VelocityManager 的实现类,因此我们只需要从 VelocityManager 继承一个子类,并重写 createContext 方法即可。重写的代码很简单,直接从 VelocityManager 的 createContext 方法中拷贝代码然后将 getToolboxContext 改为 getToolbox。

接着需要修改 Struts 2 的配置来启用这个新的子类,配置如下(struts.xml):

<constant name="struts.velocity.manager.classname" value="struts2.VelocityFixedManager"/>
            

或者是 struts.properties:

struts.velocity.manager.classname = struts2.VelocityFixedManager
            
0
相关文章