taglibs tag log language jsp el

tag - log in jsp



Concatenación de cadenas JSP EL (4)

El operador + siempre significa suma numérica en jsp el. Para realizar la concatenación de cadenas, debe usar varias expresiones el adyacentes, como ${str1}${str2} . Si leo tu ejemplo correctamente, esto podría escribirse como:

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

Editar: Otra posibilidad sería usar jstl, que es más largo pero podría ser más claro si hay más texto que depende 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 puede no ser necesario, dependiendo de la versión de jsp.

Esta pregunta ya tiene una respuesta aquí:

¿Cómo concateno cadenas en EL?

Quiero hacer algo como esto pero no funciona:

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

Lanza una excepción tratando de lanzar ''hello'' a un Double


Sé que este es un tema antiguo, pero la respuesta a esta pregunta ha cambiado en los últimos seis meses, y es importante notar ese cambio, IMO (ya que encontré esto al buscar en Google "el concatenate strings").

A partir de EL Expression 3.0 (votación pública aprobada en agosto de 2012, lanzada con Java EE 7), ahora es válida una modificación en la sintaxis que el cuestionario utilizó originalmente:

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

Hubo mucho desacuerdo con el uso de += lugar de + , pero es lo que es. Esto evaluará correctamente y concatenará las cadenas como se espera. También puede usar el operador cat lugar del operador +=

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

Si bien esto ahora es legal, tenga en cuenta que no podrá usarlo hasta que su contenedor web (Tomcat, Jetty, GlassFish, etc.) publique una nueva versión que admita Java EE 7 / EL 3.0. Esto se espera en algún momento antes de finales de 2013, tal vez ya en el otoño.

Editado el 19/02/2015 para tener en cuenta que el operador final era += y no + como se contestó originalmente.


Una alternativa más a todo lo que ya se mencionó:

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


Usar la concatenación de cadenas Java funciona mejor.

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

El beneficio aquí es que también puede pasar esto a una función, por ejemplo

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