Java 如何使用velocity上下文变量作为局部变量
在速度方面,我有一个问题。让我解释清楚如下 我已经在课堂上申报了Java 如何使用velocity上下文变量作为局部变量,java,velocity,Java,Velocity,在速度方面,我有一个问题。让我解释清楚如下 我已经在课堂上申报了 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文件的上面
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。我不想将此值设置为上下文变量。我想在if only中限制变量的范围。之后,如果我不想得到99的值,它仍然与上下文中的值相同。在速度上有可能以其他方式吗
提前感谢。无法更改上下文对象的值并使此更改仅在本地进行。我不明白为什么不在模板中简单地使用一个新的变量来实现这一点
#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
实际上,有一种方法可以在速度中引入局部变量,尽管这有点令人惊讶:
#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
。您还可以在循环中设置($maxToolTitleLength=$anotherValue)。#foreach
之前的值将在循环后恢复。由@user2624542发现的#foreach hack用于生成本地作用域。然而,至少在相当古老的Polarion速度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
不velocity没有作用域块。那么如何解决问题。如果我更改模板文件中的上下文变量值。它不会影响上下文变量吗?如果您解释您试图解决的实际问题,可能会提供解决方案。在我的项目中,有一个文本长度验证。我有四个文本框。三个文本框我想允许20个字符。对于另一个,我需要90个字符才能允许。在开发人员开发之前,他们在上下文中取一个变量并将值设置为20。在velocity模板中,他们将此变量作为最大长度属性值。如果我更改模板文件中的值,它适用于所有文本框,因为它是上下文变量。那么,如何为特定文本框指定90?