我正在尝试使用set tag
在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 ...
}
有人能帮助我吗?
答案 0 :(得分:10)
这似乎是一种解决方法,但您可以使用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>
答案 1 :(得分:6)
您可以使用括号表达式来评估表达式的结果。
<s:if test="#number(0) == 9">
<s:property value="%{#number(0)}" />
</s:if>
查看OGNL语言指南的Expression Evaluation。