我正在尝试使用set标签在Struts2中创建一个动态变量

<s:set var="myNum" value="numConst" />
<s:set var="number" value="%{getText('@xxx.CommonConstant@'+#myNum)}" />
numConst将返回从数据库检索的动态值。例如,如果值为NINE,则数字应为@xxx.CommonConstant@NINE
我在Java类中设置了值,以便@xxx.CommonConstant@NINE将返回9

到目前为止,如果使用

<s:text name="%{getText(#number)}" />

它将返回9,但是当我尝试使用属性标记时显示不正确

<s:property value="%{getText(#number)}" />
<s:property value="%{#number}" />
<s:property value="#number" />
<s:property value="%{getText('%{getText(#number)}')}" />

上面所有示例中的哪一个将为我提供@xxx.CommonConstant@NINE的值。我尝试从属性标签获取值的原因是因为我想复制关于如何显示值的正确方法,以便可以在if标签中使用它们,例如以下示例:

<s:if test="#number == 9">
   do something
</s:if>

或者

<s:if test="%{getText(#number)} == 9">
   do something
</s:if>

CommonConstant:
package xxx;

public abstract class CommonConstant {
    public static final int NINE = 9;
    public static final int NINEONE = 91;
    public static final double ADMIN_PGM = 1.4;
    // ... omitted ...
}

有谁能够帮我?

最佳答案

似乎是一种解决方法,但是您可以使用attr评估字符串。

<s:set var="myNum" value="numConst" />
<s:set var="number" value="'@xxx.CommonConstant@'+#myNum" />

<s:property value="#attr[#number]"/>

<s:if test="#attr[#number] == 9">
  do something
</s:if>

08-04 03:14