79 votes

JSP EL Concaténation de chaînes

Comment concaténer des chaînes de caractères en EL ?

Je veux faire quelque chose comme ça mais ça ne marche pas :

${var1 == 0 ? 'hi' : 'hello ' + var2}

Il jette une exception en essayant d'intégrer 'hello' à un Double

0 votes

0 votes

Utilisez simplement 'hello'.concat(var2)

82voto

Mike Haefele Points 356

L'utilisation de la concaténation de chaînes de caractères en java fonctionne mieux.

#{var1 == 0 ? 'hi' : 'hello'.concat(var2)}

L'avantage ici est que vous pouvez également passer ceci dans une fonction, par exemple

#{myCode:assertFalse(myVar == "foo", "bad myVar value: ".concat(myVar).concat(", should be foo"))}

13 votes

Veuillez noter que cela ne fonctionne que dans la toute nouvelle version EL 2.2 et non dans les anciennes versions EL entre 2001 et aujourd'hui.

67voto

Jörn Horstmann Points 18118

El + signifie toujours une addition numérique en JSP Langage d'expression . Pour effectuer une concaténation de chaînes de caractères, il faudrait utiliser plusieurs expressions EL adjacentes, par exemple ${str1}${str2} .

Si je lis correctement votre exemple, cela pourrait être écrit comme suit :

${var1 == 0 ? 'hi' : 'hello '}${var1 == 0 ? '' : var2}

Modifier

Une autre possibilité serait d'utiliser JSTL qui est plus long mais qui pourrait être plus clair s'il y a plus de texte qui dépend de var1 :

<c:choose>
    <c:when test="${var1 == 0}">hi</c:when>
    <c:otherwise>hello <c:out value="${var2}"/></c:otherwise>
</c:choose>

El c:out peut ne pas être nécessaire, selon la version de la JSP.

0 votes

J'espérais ne pas avoir à le faire... en répétant la condition à chaque fois. Mon exemple est une simplification, dans le scénario réel, je devrais répéter l'exemple 3 fois chaque fois que je veux le faire :(

43voto

Nick Williams Points 691

Je sais que c'est un vieux sujet, mais la réponse à cette question a changé au cours des six derniers mois, et il est important de noter ce changement, IMO (puisque j'ai trouvé ceci en googlant "el concatenate strings").

Depuis EL Expression 3.0 (vote public approuvé en août 2012, publié avec Java EE 7), une variante de la syntaxe utilisée à l'origine par l'auteur de la question est désormais valable :

${var1 == 0 ? 'hi' : 'hello ' += var2}

Il y a eu beaucoup de désaccord avec l'utilisation de += au lieu de + mais c'est ce que c'est. Cela évaluera et concaténera correctement les chaînes de caractères comme prévu. Vous pouvez également utiliser la fonction cat au lieu de l'opérateur += opérateur :

${var1 == 0 ? 'hi' : 'hello ' cat var2}

Bien que cela soit désormais légal, notez que vous ne pourrez pas l'utiliser tant que votre conteneur web (Tomcat, Jetty, GlassFish, etc.) n'aura pas publié une nouvelle version prenant en charge Java EE 7/EL 3.0. Celle-ci est attendue quelque temps avant la fin de l'année 2013, peut-être même dès l'automne.

Édité le 2015-02-19 de noter que l'opérateur final était += et non + comme la réponse initiale.

3 votes

Grande réponse pour voir l'avenir ! +1

6 votes

Malheureusement, ce n'est pas correct. Au dernier moment, au grand dam d'à peu près tout le monde, l'opérateur est passé du "+", tout à fait logique, au "+=", qui prête à confusion. Je ne sais pas ce que ces gens fumaient :X

0 votes

Dexter a raison. Merci pour cette clarification. Je vais modifier ma réponse.

14voto

user1182474 Points 414

Une alternative de plus à tout ce qui a déjà été mentionné :

<c:set var="hellovar2" value="hello ${var2}" />
${var1 == 0 ? 'hi' : hellovar2}

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