108 votes

Accédez à la valeur Enum en utilisant EL avec JSTL

J’ai un Enum appelé statut défini comme tel :

J’aimerais accéder à la valeur de d’une balise JSTL. Plus précisément le attribut de la `` tag. Par exemple

Je ne sais pas si cela est possible, donc toute aide serait appréciée.

117voto

Alexander Vasiljev Points 970

Une simple comparaison avec chaîne fonctionne :

54voto

James Points 1936

Si vous utilisez Spring MVC, le langage d’Expression de printemps (SpEL) peuvent être utile :

41voto

Matt Points 2617

Vous avez 3 choix ici, aucun n'est parfait:

  1. Vous pouvez utiliser un scriptlet dans l' test d'attribut:

    <c:when test="<%= dp.getStatus() == Status.VALID %>">

    Il utilise le protocole enum, mais elle utilise également un scriptlet, qui n'est pas le "droit chemin" en JSP 2.0. Mais plus important encore, cela ne fonctionne pas, lorsque vous souhaitez ajouter une autre condition à la même when l'aide ${}. Et cela signifie que toutes les variables que vous souhaitez tester, doivent être déclarés dans un scriptlet, ou dans la demande, ou à la séance (pageContext variable n'est pas disponible en .tag fichiers).

  2. Vous pouvez comparer à la chaîne:

    <c:when test="${dp.status == 'VALID'}">

    Cela a l'air propre, mais vous êtes l'introduction d'une chaîne qui duplique la valeur d'enum et ne peut pas être validée par le compilateur. Donc, si vous supprimez la valeur de l'enum ou les renommer, vous ne verrez pas que cette partie du code ne sont plus accessibles. En gros, vous avez à faire un rechercher/remplacer dans le code à chaque fois.

  3. Vous pouvez ajouter chacun des valeurs enum vous utilisez dans le contexte de la page:

    <c:set var="VALID" value="<%=Status.VALID%>"/>

    et puis vous pouvez faire ceci:

    <c:when test="${dp.status == VALID}">

Je préfère la dernière option (3), même si elle utilise également un scriptlet. C'est parce qu'il l'utilise seulement lorsque vous définissez la valeur. Plus tard, vous pouvez l'utiliser en plus complexe EL expressions, de concert avec les autres EL conditions. Alors que dans l'option (1) vous ne pouvez pas utiliser un scriptlet et une expression EL dans l' test d'attribut d'un seul when balise.

23voto

IaCoder Points 2449

Afin d’obtenir mon problème soit entièrement résolu j’ai besoin de faire ce qui suit :

Puis j’ai été capable de faire :

qui a fonctionné comme prévu.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X