【问题标题】:Java velocity vm file #set use boolean variableJava 速度 vm 文件 #set 使用布尔变量
【发布时间】:2015-10-01 18:40:22
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: java apache web velocity template-engine


    【解决方案1】:

    在velocity中,没有明确的数据类型,因此不支持布尔变量。但是由于velocity是在JAVA平台上构建的,如果您指定一个兼容的值,那么它可以在诸如“if”操作(代码中显示的操作)之类的操作中为您提供预期的结果。这是因为在 Java 中,if 表达式中需要一个布尔值,而您提供的东西可以很容易地转换为布尔值。

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

    因此它不是对布尔类型的支持,而是幕后的 Java 实现使事情顺利进行。

    【讨论】:

      【解决方案2】:

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

      同时,您可以求助#if("isRight"=="true")...

      【讨论】:

        【解决方案3】:

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

        因此,如果您想确保编写的代码与文档 100% 兼容,那么您可以使用其他值代替显式 Booleanaccording to the documentation 将转换为 布尔值。他们是例如0false1true

        那么您的示例将如下所示:

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-11-22
          • 1970-01-01
          • 1970-01-01
          • 2015-02-16
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多