struts 2 if:compare enum

时间:2010-01-11 18:10:10

标签: java jsp struts2

我有一个带有以下代码的Struts 2 jsp ......

<s:iterator value="categories" id="category" status="iteratorStatus">
<s:if test='#category == "M" '>  snip </s:if>

问题是类别背后的java代码是..

    private static final CategoryEnum[] PRIVATE_VALUES = {A,B,C,M   };
    public static final List<CategoryEnum> VALUES = Collections.unmodifiableList(Arrays.asList(PRIVATE_VALUES));
    public List<CategoryEnum> getCategories() {
    return CategoryEnum.VALUES;
}

因此IF语句不起作用,它永远不会评估为真。 我已经尝试过逃避角色等,但没有成功。

我更愿意使用'category'值回调Action类,并决定该怎么做。 e.g。

<s:if test='renderCategory(#category)>  snip </s:if>

但我不知道如何将#category传回给行动。

所以任何人都可以帮助我解决如何传递值或使Struts IF标记与枚举一起工作。

我已经读过这篇文章了:这里帮助不大,但无论如何我都会参考iy:

Struts 2: Why won't the 'if' tag evaluate a one char string

有人可以帮我吗?

杰夫波特

2 个答案:

答案 0 :(得分:9)

似乎我没有查看CategoryEnum类(只附加.class而不是.java)。

CategoryEnum类虽然它是枚举,但值是它们自己的类,因此在它上面调用toString()将允许我比较每个类中的值。

<s:iterator value="categories" id="category" status="iteratorStatus">
<s:if test='#category.toString() == "M" '>  snip </s:if>

答案 1 :(得分:1)

从您的示例中我不清楚什么是PRIVATE_VALUES数组?它看起来像A,B,C和M是CategoryEnum的实例。在这种情况下,您将CaterogyEnum与OGNL表达式中的字符串进行比较,这就是它失败的原因。

您可以在页面呈现之前使用真正的Java 1.5枚举,还是在您的操作上创建一个新的String值列表?