牛骨文教育服务平台(让学习变的简单)
博文笔记

实现自定义Velocity Context

创建时间:2007-04-28 投稿人: 浏览次数:5644

Webwork的WebWorkVelocityContext默认提供了 req,res.stack,webwork,action几个内置对象,但不一定能满足我们的需要,往往,我们需要自己定义一些工具类,在velocity页面中调用,比如说,webwork并没有提供一个数据处理的内置对象,Math类使用静态方法,我们不能用简单的直接访问方式访问其中的函数,作为替代方法,我们可以写一个类,创建Math类的包装类,并确保在velocity模板中使用一个变量可以进行数学类方法调用

我们要自己定义一个类,继承VelocityContext,以便让webwork使用我们自定义的VelocityContext

其中定义了数学类Math的包装MathUtil

package ch10;

import org.apache.velocity.VelocityContext;

public class MathVelocityContext extends VelocityContext ...{
  public static final String MATH="math";
  public static final MathUtil O_MATH=new MathUtil();
 
  public Object internalGet(String arg0) ...{
    if(MATH.equals(arg0))...{
        return O_MATH;
    }else...{
        return super.internalGet(arg0);
    }
   }
  public boolean containsKey(Object key) ...{
         return MATH.equals(key)||super.containsKey(key);
    }
  public static class MathUtil...{
        
      public long round(double a)...{
            return Math.round(a);
        }
        public double ceil(double a)...{
            return Math.ceil(a);
        } 
}



}

模板:我们用$math调用包装类MathUtil

<body>
    $math.round(132.1831)
    $math.ceil(132.1831)
</body>

webwork.properties配置

webwork.velocity.contexts=ch10.MathVelocityContext

如果有多个VelocityContext,用“,”隔开

 

运行结果:

132 133.0

声明:该文观点仅代表作者本人,牛骨文系教育信息发布平台,牛骨文仅提供信息存储空间服务。