我的问题很简单,但我认为Velocity并不支持这一点。 我必须使用vm文件中定义的变量名访问地图或对象。
#foreach( $i in [1..10] )
#set( $img_link = "slide${i}_link" )
#set( $img_src = "slide${i}.jpg" )
#set( $img_alt = "slide${i}_alt" )
<li>
<a href="$config.$img_link">
<img src="/assets/images/$img_src" alt="$config.$img_alt" />
</a>
</li>
#end
(配置是地图)
这里的问题是,当我发送此模板进行渲染时,我得到了这段代码:
<li>
<a href="<toString of map>.slide_1_link">
<img src="/assets/images/slide_1.jpg" alt="<toString of map>.slide_1_alt" />
</a>
</li>
所以看起来在渲染模板的那一刻,$ img_src,$ img_link和$ img_alt没有被正确定义,而velocity试图在自身上呈现 config 对象,并且下一轮渲染,配置它已经呈现为纯文本,其余变量只是放在那里。
比这更奇怪的是,如果我在上下文中渲染vm 没有config 对象,然后我添加它并渲染已经渲染的内容,它就会被正确处理,但这对我没有任何意义。
我看到尝试访问pojo而不是地图的行为相同。
你知道这是一个Velocity错误还是我错过了什么?
感谢。
Java:1.5 速度:1.7 Velocity-Tools:2.0
答案 0 :(得分:3)
好的,解决了。
访问地图有三种不同的方式:
如果您尝试使用带编码的值,或者甚至是基于带有编码值的变量,这三种方法都可以完美地运行。 但如果您尝试使用基于另一个变量的变量访问地图,则选项2无法正常工作。
我留下此评论以防有人遇到同样的错误。
答案 1 :(得分:0)
我可能误解了你的问题,但在我看来,你试图以错误的方式访问地图条目。要获取地图条目的值,您应该使用#get方法:
<li>
<a href="$config.get($img_link)">
<img src="/assets/images/$img_src" alt="$config.get($img_alt)" />
</a>
</li>
如果地图中有一个条目&#34; slide1_link&#34;,一个带有键&#34; slide1_alt&#34;,一个带有键&#34; slide2_link&#,这将有效34;等,否则将为未找到的密钥输出空字符串。