现在的位置: 首页 > 综合 > 正文

Velocity的扩展

2013年10月15日 ⁄ 综合 ⁄ 共 1319字 ⁄ 字号 评论关闭
   之前一直找不到velocity的扩展接口,导致工作一直做不下去。今天看了一个下午+一个晚上的文档,终于找到了突破口(看来我是挺笨的)。就在VelocityTools这一块。
  在IBM实习时养成的很好的习惯--看源码--真是受用终身啊。通过不断的对比VelocityTools的文档,javadoc和源码,发现原来在那个toolbox.xml里大有文章。

  首先,要指定toolbox.xml的位置,在web.xml里

    <servlet>
        
<servlet-name>velocity</servlet-name>
        
<servlet-class>org.apache.velocity.tools.view.servlet.VelocityViewServlet</servlet-class>
        
<load-on-startup>10</load-on-startup>
        
<init-param>
            
<param-name>org.apache.velocity.toolbox</param-name>
            
<param-value>/WEB-INF/toolbox.xml</param-value>
        
</init-param>
    
</servlet>
    
<servlet-mapping>
        
<servlet-name>velocity</servlet-name>
        
<url-pattern>*.vm</url-pattern>
    
</servlet-mapping>

  这是toolbox.xml的一部份:

<toolbox>

  
<tool>
     
<key>math</key>
     
<scope>application</scope>
     
<class>org.apache.velocity.tools.generic.MathTool</class>
     
<request-path>/catalog/*</request-path>
  
</tool>

</toolbox>

  <key>里就是在VTL里写的$math,这样就算引入一个对象了。
  <scope>是生命周期,有关init()方法的调用。
  其它两个的作用从字面上和表达就可以猜出来了。

  对于扩展的类,与web容器相关的主要是一个public void init(java.lang.Object object)的方法,传入的参数是org.apache.velocity.tools.view.context.ViewContext接口,但需要手动转换。从这个接口,可以得到request, session, response, servletContext等对象,同时根据scope的不同在调用次数上也会有不同。application的只初始化一次,request每次请求都会重新初始化,session就是在session建立时初始化。
  看过这些以后,对那些VelocityStruts工具的原理就一目了然咯~~

抱歉!评论已关闭.