Struts 2动态变量

Zul*_*mad 10 java jsp struts2 ognl dynamic-variables

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

<s:set var="myNum" value="numConst" />
<s:set var="number" value="%{getText('@xxx.CommonConstant@'+#myNum)}" />
Run Code Online (Sandbox Code Playgroud)

numConst将返回从数据库中检索的动态值.例如,如果值为NINE则应为数字@xxx.CommonConstant@NINE

我已经在我的java类中设置了值,以便@xxx.CommonConstant@NINE返回9.

到目前为止,如果我使用的话,可以在文本标签中显示该值没有问题

<s:text name="%{getText(#number)}" /> 
Run Code Online (Sandbox Code Playgroud)

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

<s:property value="%{getText(#number)}" /> 
<s:property value="%{#number}" />
<s:property value="#number" />
<s:property value="%{getText('%{getText(#number)}')}" />
Run Code Online (Sandbox Code Playgroud)

以上所有的例子都会给我价值@xxx.CommonConstant@NINE.我尝试从属性标记中获取值的原因是因为我想要复制正确的方法来显示值,以便我可以在if标签中使用它们,如下例所示:

<s:if test="#number == 9">
   do something
</s:if>
Run Code Online (Sandbox Code Playgroud)

要么

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

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 ... 
}
Run Code Online (Sandbox Code Playgroud)

有谁能够帮我?

Ale*_*r M 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>
Run Code Online (Sandbox Code Playgroud)


Rom*_*n C 6

您可以使用括号表达式来计算表达式的结果.

<s:if test="#number(0) == 9">
  <s:property value="%{#number(0)}" />
</s:if>
Run Code Online (Sandbox Code Playgroud)

查看OGNL语言指南的表达式评估.