Velocity自定义指令(函数)

使用velocity的时候,我们可能需要实现自定义的函数,类似:

#somefun()

这个函数可能是需要做一些业务代码,或者往context存取变量,或者可以向页面输出html代码。

假如我们要写一个输出hello xxx的函数,其中xxx是从context中取出的变量值,首先要在velocity.properties中添加一个:

userdirective=me.bwong.vm.HelloFun,...others

这一行告诉velocity引擎,在我的工程中有一个velocity函数,这个函数实现类是me.bwong.vm.HelloFun,这个类需要实现接口:org.apache.velocity.runtime.directive.Directive,参考如下代码:

public class HelloFun extends Directive {

 

    @Override

    public String getName() {

        return "hellofun";

    }

 

    @Override

    public int getType() {

        return LINE;

    }

 

    @Override

    public boolean render(InternalContextAdapter context, Writer writer, Node node) throws IOException, ResourceNotFoundException,

            ParseErrorException, MethodInvocationException {

 

        return true;

    }

 

}

getName接口用来告诉velocity这个函数名是什么,也就是页面上调用这个函数的名称,比如#hellofun();

getType接口用来告诉velocity这个函数类型,可以是行也可以是块函数;

render接口用来输出html代码,当然也可以不输出,如果需要输出,则使用入参的writer.write("some html"),context是当前velocity的容器,可以存取变量,比如在页面上使用#set($name="bwong"),可以通过context.get("name")取出"bwong",node里面可以取出调用这个函数时的入参,比如#hellofun("a"),通过node.jjtGetChild(0).value(context)取出"a",所以:

writer.write("hello " + node.jjtGetChild(0).value(context));

就可以输出"hello xxx",xxx是调用这个函数时的入参。

 

欢迎光临我的独立博客http://bwong.me

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值