【IT168 技术文档】
Struts 2 是 Struts 框架的一个全新版本,它废弃了原有 Struts 1.x 的框架结构,在 WebWork 的基础上全面提升了代码的配置灵活性、可测试性以及超强的扩展性。Struts 2 更是提供了对 Velocity 和 FreeMarker 模板引擎的支持,这破天荒的举动大大的方便了 Velocity 和 FreeMarker 的开发者,从而也更有效的推动了模板技术的发展。
在进行 Struts 2 和 Velocity 结合的试验中发现下面几个问题:
- 与 VelocityTools 1.3 存在兼容性问题;
- 不支持 Velocity Layout;
- 处理 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 |