apache Java velocity虚拟机文件#set使用布尔变量

zc0qhyus  于 2023-02-16  发布在  Apache
关注(0)|答案(3)|浏览(127)

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

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

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

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

vaj7vani

vaj7vani1#

在velocity中,没有显式的数据类型,因此不支持布尔变量。但由于velocity是在JAVA平台上构建的,如果您指定一个兼容的值,那么它可以在诸如“if”操作之类的操作中给予您预期的结果(代码中显示的那个)。这是因为在Java中,在if表达式中需要一个布尔值,而您提供的内容可以很容易地转换为布尔值。
如果你给予#set($是正确的=真1),Java引擎将在内部处理上面编写的代码,就像您在“if”表达式中指定了一个字符串一样,该表达式无法强制转换为布尔值,因此将引发类型强制转换异常(或ClassCastException)。这将在使用“true”或“false”以外的任何值时发生它们在这里实际上是字符串,但可以成功地转换为布尔值,这在“if”表达式中是预期的。
因此,这不是布尔类型支持,而是幕后的Java实现使事情工作。

uqdfh47h

uqdfh47h2#

经验表明,您的示例是有效的,但是您是对的,文档没有明确说明您可以使用#set指令为变量赋值 Boolean 值(有一些非常详细的情况,其中缺乏关于 Boolean 的信息)。
因此,如果你想确保你编写的代码与文档100%兼容,那么你可以使用其他值来代替显式的 Boolean,根据文档,这些值将被转换为 Boolean。例如,0对应false1对应true
那么您的示例将如下所示:

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

#set ($isRight = 0)
#if ($isRight)
  ## not execute
#end
oewdyzsn

oewdyzsn3#

尚未发布的Velocity 2.0确实支持此类测试。
同时,您可以求助于#if("$isRight"=="true")...

相关问题