问题描述
例如: 在我的操作类中,我有一个具有以下字段的对象(货币):“id”和“symbol”。 所以在我的视图页面中我可以使用这个:
<s:iterator value="currency">
<s:set name="var_%{id}" value="symbol"/>
<s:set name="total_%{id}" value="%{0.0}"/>
</s:iterator>
所以我可以使用它来创建这些 PageContext 变量,如“var_BRL”、“var_USD”、“var_MXN”和“total_BRL”、“total_USD”、“total_MXN”等。如果我编写以下代码:
<s:property value="#var_USD"/> = <s:property value="#total_USD"/>
我可以检索如下结果:
USD = 0.0
我正在使用这些 #total_XXX 变量在另一个迭代器提供的某些条件下对一些值求和,以一种我将在另一个迭代结束时获得的方式,这是每种货币(BRL)的总花费的结果、美元、墨西哥比索等)。
但是当我尝试动态检索这些值时,没有呈现任何内容。以下是我用来从这些变量中检索值的代码,位于我的页面末尾。我不太了解OGNL,所以我尝试了如下不同的安排,但都没有成功:
<s:iterator value="currency">
<s:property value="#var_%{id}"/> = <s:property value="#total_%{id}"/>
<s:property value="#%{var_%{id}}"/> = <s:property value="#%{total_%{id}}"/>
<s:property value="%{#var_%{id}}"/> = <s:property value="%{#total_%{id}}"/>
</s:iterator>
有没有办法在 PageContext 中检索这些值?或者我只能在我的 Action 中解决这个问题?我搜索了很多帖子,但找不到任何内容。
谢谢! LZ
解决方法
与朋友讨论后,我找到了正确的 OGNL 表达式来调用代码末尾的动态创建的变量名称:
<s:iterator value="currency">
<s:property value="#attr['var_'+id]"/> = <s:property value="#attr['total_'+id]"/><br>
</s:iterator>