[英]Velocity templates : how do I put the result of #springMessage() into a velocity variable
[英]How to work with velocity context variable as local variable
在速度上我有一個問題。 讓我清楚地解釋一下我在課堂上聲明的內容
private final static int MAX_TOOL_TITLE_LENGTH = 20;
//Putting into context
context.put("maxToolTitleLength","MAX_TOOL_TITLE_LENGTH");
現在在vm文件中,我將上下文變量值設置為不同
#if(true)
#set($maxToolTitleLength=99)
#end
在vm文件的上述各行中,我將值設置為99.i不想將此值設置為上下文變量。我想通過if僅將變量的范圍限制為。 之后,如果我不想獲得99.it的值,則它仍與上下文中的值相同。 是否可以通過其他任何方式提高速度?
提前致謝。
其實有一種方法來引入速度的局部變量,雖然它是有點出人意料:
#foreach ($maxToolTitleLength in [99])
...text that uses this $maxToolTitleLength definition...
#end
## now $maxToolTitleLength is back to whatever value it had before
[99]
是具有一個元素99
的列表,因此這是一個執行一次的循環。 在循環內, $maxToolTitleLength
的值為99
。 您也可以在循環內#set ($maxToolTitleLength = $anotherValue)
。 #foreach
之前的值將在循環后恢復。
@ user2624542發現的#foreach-hack用於生成本地作用域。 但是,至少在相當老的Polarion Velocity 1.5中,宏內部的行為不同於外部。
在宏內部,作用域范圍適用於現有變量(在全局上下文中),但不適用於未定義的變量。
$foo ## undef
#foreach ($foo in [99])
$foo ## 99
#set($foo=100)
$foo ## 100
#end
$foo ## undef
#set($foo=0)
$foo ## 0
#foreach ($foo in [99])
$foo ## 99
#set($foo=100)
$foo ## 100
#end
$foo ## 0
而在宏內
#macro(bar)
$foo ## undef
#foreach ($foo in [99])
$foo ## 99
#set($foo=100)
$foo ## 100
#end
$foo ## 100 NOT undef
#end
$foo ## undef
#bar()
$foo ## 100 NOT undef
#macro(bar2)
$foo ## 0
#foreach ($foo in [99])
$foo ## 99
#set($foo=100)
$foo ## 100
#end
$foo ## 0
#end
#set($foo=0)
$foo ## 0
#bar2()
$foo ## 0
不能更改上下文對象的值並使此更改僅在本地進行。 我不明白為什么您不為此簡單地在模板中使用新變量?
#if (true)
#set($thisTitleLength=99)
#end
或者,如果您確實需要為此使用上下文變量,則在完成要更改其值的塊之后,只需還原上下文變量即可:
#if (true)
#set($maxToolTitleLength=99)
## Do whatever you want with the new value
...
## Now restore its value
#set($maxToolTitleLength=20)
#end
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.