今天在使用nvelocity模版的时候遇到一个问题,参考示例代码如下:

1    <form action="target.rails" method="get">
2        <input type="text" name="username"/>
3        <input type="text" name="age" value="-1"/>
4        <input type="submit" value="submit"/>
5    </form>
6    #if($age <= 1)
7        age 变量是以数值进行比较
8    #end

 

此时的submit请求url 则显式为..target.rails?username=name&age=-1

然而,#if($age <= 1)的判断条件却并不成立,想来nvelocity模版引擎是将所有从url请求得来的参数值,均以字符串类型来进行保存,自然,对于判断条件的比较也是以字符串来进行.所以当..target.rails?username=name&age=10,判断条件变为#if($age <= 3)时,返回为true,明显的,nvelocity并未将变量在判断条件中进行类型转换操作后再进行判断.

不过在Controller 中使用PropertyBag.Add("age",-1)向nvelocity模版输出变量age,则将自动由nvelocity模版引擎转换为数字类型进行保存,#if($age <= 1)表达式成立,生成html页面打印"age变量是以数值进行比较".

这个问题,不知道这算不算是nvelocity的一个BUG更或者其本身定义就是如此.当然,直接通过url传递参数也可以通过#set($age = $age + 0) 表达式进行一次计算操作,nvelocity引擎将会对在运算中对自动对$age变量进行数据类型转换,之后,再使用#($age <= -1)则自然就返回为True了.

posted on 2008-11-14 00:17  .Net Learning  阅读(1236)  评论(1编辑  收藏  举报