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 concatenar una cadena en EL? 5 respuestas
¿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"))}