web-dev-qa-db-fra.com

JSP EL Concaténation de chaînes

Comment concaténer des chaînes dans EL?

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

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

Il jette une exception essayant de lancer 'hello' à un Double

74
Kyle

Le + opérateur signifie toujours addition numérique dans jsp el. Pour effectuer la concaténation de chaînes, vous devez utiliser plusieurs expressions el adjacentes, telles que ${str1}${str2}. Si je lis correctement votre exemple, cela pourrait être écrit ainsi:

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

Edit: Une autre possibilité consisterait à utiliser jstl, qui est plus long mais peut-ê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>

le c:out _ peut ne pas être nécessaire, selon la version de jsp.

61
Jörn Horstmann

L'utilisation de la concaténation de chaînes Java fonctionne mieux).

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

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

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

Je sais que c’est un sujet ancien, mais la réponse à cette question a changé au cours des six derniers mois et il est important de noter ce changement, IMO (depuis que j’ai trouvé cela par Googling "el concatenate strings").

À partir de EL Expression 3.0 (vote public approuvé en août 2012, publié avec Java EE 7), une modification de la syntaxe utilisée à l'origine par le questionneur est désormais valide:

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

Il y avait 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 comme prévu. Vous pouvez également utiliser l'opérateur cat à la place de l'opérateur += opérateur:

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

Bien que cela soit maintenant 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 qui prend en charge Java EE 7/EL 3.0, prévu pour la fin de 2013, peut-être dès l’automne.

Edité 2015-02-19 à noter que l'opérateur final était += et pas + comme initialement répondu.

35
Nick Williams

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

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