2010-01-11 53 views
4

我有一个Struts 2 JSP用下面的代码...支柱2,如果:比较枚举

<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类,并决定要做什么。例如

<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

谁能帮助我吗?

杰夫·波特

回答

9

看来我没有看到CategoryEnum类(只有.class附加的不是.java)。

CategoryEnum类,虽然它是一个枚举值是自己的阶级,所以因此调用它的toString()可以让我比较每一个中值。

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

就是我正在寻找的!非常感谢... – Nischal

1

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

你可以使用真正的Java 1.5枚举,或在你的行动莫比创建字符串值的一个新的列表,页面呈现前?

+0

是的,PRIVATE_VALUES是一个CaterogyEnum数组。 我给你一个+1,让我看起来更接近CaterogyEnum实例。 –