我正在尝试做类似于this question的操作,但是答案不能解决我的问题。我正在使用Struts2版本2.3.28.1。

我正在尝试使用<s:property>标记和动态值字符串文字访问会话中的数据。

如果我做:

<s:property value="#session.data_1"></s:property>


然后显示正确的数据。现在,当我尝试以下操作时:

<s:set var="part1" value="#variable.code"></s:set>
<s:set var="part2" value="'#session.data_'+#part1"></s:set>

<s:property value="part2"></s:property>
<s:property value="%{part2}"></s:property>
<s:property value="%{#part2}"></s:property>
<s:property value="#attr[#part2]" default="Not working"></s:property>
<s:property value="(#part2)" default="Not working"></s:property>
<s:property value="%{(#part2)}" default="Not working"></s:property>


显示:

#session.data_1
#session.data_1
#session.data_1
Not working
#session.data_1
#session.data_1


(是的,我尝试了我可能想到的所有可能组合,即使它们没有任何意义...)

如何使<s:property>标记评估#part2而不是解释为字符串文字?以我的理解,%{}应该可以解决,但不能。

最佳答案

您正在尝试从会话中检索值,并通过#attr无效。

有更简单的方法。直接使用#session关键字。

<s:property value="#session['data_' + #variable.code]" />

09-27 23:12