如何为 s:set for Struts2 检索动态生成的名称标签?

问题描述

如何在 Struts 2 上为 检索动态生成名称标签

例如: 在我的操作类中,我有一个具有以下字段的对象(货币):“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>