java velocity vm file #set使用boolean变量

时间:2015-07-13 13:12:37

标签: java apache web velocity template-engine

当我在Apache官方网站上找到速度项目指南时,我们不能通过#set使用布尔变量,但是当我在项目中使用它时它也可以工作。

#set($isRight=true)
#if($isRight)
##execute
#end

#set($isRight=false)
#if($isRight)
##not execute
#end

我想知道速度是否支持#set布尔变量以及我使用的方式是否合法。

3 个答案:

答案 0 :(得分:0)

在速度方面,没有明确的数据类型,因此没有布尔变量支持。但是由于速度已经建立在J​​AVA平台上,如果你指定一个兼容的值,那么它可以在诸如" if"之类的操作中给你预期的结果。操作(代码中显示的操作)。这是因为在Java中,if表达式中需要一个布尔值,并且您提供的东西可以很容易地转换为布尔值。

如果你给出类似#set($ isRight = true1)之类的东西,上面编写的代码将由Java引擎内部处理,就像你在里面指定了一个字符串'如果'表达式,它不能被转换为布尔值,因此会抛出一个类型转换异常(或ClassCastException)。除了' true'之外的任何其他值都会发生这种情况。或者' false'这里实际上是字符串,但可以成功地转换为布尔值,如果'表达

因此它不是布尔类型支持,但幕后的Java实现使事情有效。

答案 1 :(得分:0)

尚未发布的Velocity 2.0确实支持此类测试。

同时,您可以诉诸#if("isRight"=="true")...

答案 2 :(得分:0)

经验表明您的示例有效,但您是对的,文档没有明确说明您可以使用#set指令为变量分配 Boolean (其中有meticulously detailed cases,其中缺少有关 Boolean 的信息)。

因此,如果您要确保所编写的代码与文档100%兼容,则可以使用其他值代替{em> Boolean ,而将according to the documentation转换为其他值。改为 Boolean 。他们是例如0的{​​{1}}和false的{​​{1}}。

然后您的示例如下所示:

1