在串联语句中增加值的速度

Velocity adding values with in concatenation statement

抱歉,如果之前有人问过这个问题,但我找不到直接的答案。

我有以下代码,该应用程序是第三方,因此传入的 $supernet 以字符串形式提供。所以我想做的是获取一个 IP 地址,然后对其进行操作以创建基于模板的子网列表。

#set ($Supernet = "10.10.10.10") 
#set ($octs = $Supernet.split("\."))

#set ($netmgmt[2] = "$octs[0].$octs[1].$octs[2].$octs[2]+1")

$netmgmt

但这正如我预期的那样给出了结果“10.10.10.10+1”

我发现我可以用手写的方式做到这一点

  1. 将 $oct[2] 转换为整数并存储在变量中
  2. 创建一个临时变量并存储转换后的$oct[2] + 1
  3. 的结果
  4. 然后用它来创建字符串

喜欢

$Integer = $convert.toInteger($oct[2])
#set ($newoct = $Integer + 1) 
#set ($netmgmt[2] = "$octs[0].$octs[1].$octs[2].$newoct")

但我有很多这些要创建,这会变得冗长和混乱。

所以我想知道我是否可以编写#set ($octs = $Supernet.split(".")) 来存储为整数。老实说,仅仅尝试将每个数组值直接转换为 int 似乎并不像我在网上找到的那样工作。我预计下面会导致“$oct1 = 10”,但事实并非如此?

#set ($Supernet = "10.10.10.10") 
#set ($octs = $Supernet.split("\."))
#set ($oct1 = $convert.toInteger($oct[0])

Velocity 新手,感谢任何帮助。

您应该检查您使用的是哪个版本的 Velocity-Tools,以及哪些工具在提供的上下文中可用。

例如,自 Velocity-Tools 3.1 以来,$convert.toInteger() 已被弃用,取而代之的是 $math.toInteger()。您可以通过显示 $convert$math.

来检查上下文中是否存在这些工具

以下代码适用于 Velocity 1.7 + Tools 2.0,只要使用 Velocity 2.X + Tools 3.x:

#set ($Supernet = "10.10.10.10")
#set ($octs = $Supernet.split('\.'))
#set ($last = $math.toInteger($octs[2]) - 1)
#set ($ip = "${octs[0]}.${octs[1]}.${octs[2]}.$last")
$ip