簡體   English   中英

Java 速度 vm 文件 #set 使用布爾變量

[英]Java velocity vm file #set use boolean variable

當我在 Apache 官方網站上找到速度項目指南時,我們不能通過#set使用布爾變量,但是當我在我的項目中使用它時它也有效。

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

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

我想知道#set Boolean 變量是否支持velocity 以及我使用的方式是否合法。

在速度中,沒有明確的數據類型,因此不支持布爾變量。 但是由於速度是建立在 JAVA 平台上的,如果您指定一個兼容值,那么它可以在諸如“if”操作(在您的代碼中顯示的操作)之類的操作中為您提供預期的結果。 這是因為在 Java 中,在 if 表達式中需要布爾值,並且您提供的東西可以輕松轉換為布爾值。

如果您給出類似 #set($isRight=true1) 的內容,Java 引擎將在內部處理上面編寫的代碼,就像您在 'if' 表達式中指定的字符串一樣,該字符串無法轉換為布爾值,因此會拋出類型轉換異常(或 ClassCastException)。 除了“true”或“false”之外的任何值都會發生這種情況,這些值實際上是此處的字符串,但可以成功轉換為“if”表達式中預期的布爾值。

因此它不是布爾類型支持,而是幕后的 Java 實現使事情起作用。

尚未發布的 Velocity 2.0 確實支持此類測試。

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

經驗表明您的示例有效,但您是對的,文檔沒有明確說明您可以使用#set指令為變量分配布爾(其中有非常詳細的案例並且缺乏有關布爾的信息)。

因此,如果您想確保您編寫的代碼與文檔 100% 兼容,那么您可以使用其他值代替顯式Boolean根據文檔,這些值將轉換為Boolean 它們是例如0表示false1表示true

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

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

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM