2012-06-26 3 views
0

J'ai des problèmes avec les Struts 2 <s:if>/<s:else> les étiquettes – la condition ne correspond pas. Il va toujours à autre bloc.<s:if> tag ne fonctionne pas

J'ai un sous-menu variable dans mon action avec des setters et des getters. J'ai mis la variable à "1" dans mon action.

J'ai essayé chacune des syntaxes ci-dessous:

<s:if test="%{#subMenu == \"1\"}"> 
    This is Submenu 1 
</s:if> 

<s:if test="subMenu == '1'"> 
    You have selected 1. 
</s:if> 

<s:if test="%{#subMenu == '1'}"> 
    This is Submenu 1 
</s:if> 

<s:if test="%{subMenu == '1'}"> 
    This is Submenu 1 
</s:if> 
+0

est une chaîne « subMenu » ou int? – Jaiwo99

Répondre

1

ici pourrait être la solution. si le résultat de votre action est « simple » et subMenu est de type « chaîne », ce qui signifie, il est une page

<s:if test="subMenu == '1'">test</s:if> 

devrait fonctionner.

voici la suggestion.

  1. essayer print "subMenu" d'abord pour vérifier, si la variable non nulle en utilisant:

    <s:property value="subMenu"/> 
    
  2. vérifier votre classe d'action, si le résultat est pas * .jsp, mais * .action , vous perdrez votre variable, essayez d'ajouter votre variable en tant que paramètre comme ceci:

    <result name="success"> 
        <param name="subMenu">${subMenu}</param> 
        <param name="location">*.action</param> 
        ... 
    </result> 
    
+0

Ce ne sera pas le cas, à cause de la façon dont OGNL analyse les entités à un seul caractère entourées de guillemets simples. –

+0

@DaveNewton Salut Dave, en fait j'utilise 'string' moi-même dans mon projet strut2, et ça marche bien. cela ne veut pas dire entourer un char, mais différer avec "". – Jaiwo99

+0

OGNL traite un seul caractère entre guillemets simples comme un caractère, et non comme une chaîne - c'est pourquoi la comparaison de l'OP échoue. Je peux vous montrer le code qui montre la différence, et les documents de l'OGNL qui l'expliquent, si nécessaire. –

1

Si subMenu est un String comme l'indiquent les tests, utilisez des guillemets doubles, sinon la valeur immédiate sera interprétée comme char (et non comme String) car il s'agit d'un seul caractère entre guillemets simples.

<s:if test='%{subMenu == "1"}'> 
    This is Submenu 1 
</s:if> 

Notez que j'ai inversé les guillemets utilisés. C'est ainsi que fonctionne OGNL. Les alternatives incluent l'utilisation d'un entier réel, ou ayant un système plus facile à raisonner au-delà de "1", "2", "3", etc. et l'utilisation de noms contextuels au lieu de faire réfléchir les gens .

0

Pour les caractères simples entretoises si la solution comparaison na pas work.Easy est essayez d'utiliser une chaîne au lieu d'un seul omble chevalier

+0

Cela fonctionne bien. Voir http://stackoverflow.com/a/14963831/1700321. –