2010-01-11 6 views
4

J'ai Struts 2 jsp avec le code suivant ...entretoises 2 si: comparer ENUM

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

Le problème est le code java derrière catégories est ..

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; 
} 

Ainsi, le SI La déclaration ne fonctionne pas, elle n'évalue jamais à vrai. J'ai essayé d'échapper aux charaters etc, mais sans succès.

Je préférerais rappeler la classe Action avec la valeur 'category' et décider de ce qu'il faut faire. par exemple.

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

mais je ne sais pas comment passer la #catégorie à l'action.

Donc, quelqu'un peut-il m'aider à trouver comment faire passer la valeur en arrière ou à faire fonctionner la balise IF Struts avec une énumération.

Je l'ai déjà lu ceci: ce qui ne nous aide pas, mais je vais référencer iy de toute façon:

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

quelqu'un peut me aider s'il vous plaît?

Jeff Porter

Répondre

9

Il semble que je n'ai pas regardé la classe CategoryEnum (seulement la .class attachée pas le .java). Catégorie ClassEnum Bien qu'il s'agisse d'une énumération, les valeurs sont leur propre classe, donc appeler toString() me permettra de comparer la valeur de chacune d'entre elles.

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

juste ce que je cherchais! Merci beaucoup... – Nischal

1

Il est clair pour moi de votre exemple quel est le tableau PRIVATE_VALUES? il semble que A, B, C et M sont des instances de CategoryEnum. Dans ce cas, vous comparez un CaterogyEnum à une chaîne dans votre expression OGNL, c'est pourquoi il échoue. Pouvez-vous utiliser des enums Java 1.5 réels, ou maby créer sur votre action une nouvelle liste de valeurs String avant le rendu de la page?

+0

yep, PRIVATE_VALUES est un tableau de CaterogyEnum. Je vais vous donner un +1 pour me faire regarder de plus près les instances de CaterogyEnum. –