Estoy creando una lista desplegable de todos los idiomas. La selección del idioma por defecto de la lista será determinado por la información añadida por el usuario:¿Cómo comparar dos variables de objeto en el lenguaje de expresión EL?
<select>
<c:forEach items="${languages}" var="lang">
<c:choose>
<c:when test="${lang}.equals(${pageLang})">
<option value="${lang}" selected>${lang}</option>
</c:when>
<c:otherwise>
<option value="${lang}">${lang}</option>
</c:otherwise>
</c:choose>
</c:forEach>
</select>
.equals
no parece existir en EL. Después de echar un vistazo aquí, se sugiere que escriba mi propia función y luego la importe y la use. Como esta es una pequeña cosa solo para esta página, no quiero tener que empezar a crear bibliotecas, etc. solo para esto. Tampoco quiero comenzar a crear objetos especializados para que el servlet regrese con esta información adicional.
Lo único que puedo hacer es devolver el html real para toda la línea de opciones del servlet en lugar de solo la cadena de idioma, pero eso me parece feo, así que espero que haya una solución más elegante.
¿Cuál es el mejor plan para una solución rápida para comparar dos cadenas en EL?
Supongo que puedo usar 'test =" $ {lang eq 'en'} "¿entonces también? Veo 'eq' allá arriba, pero no fue con constantes de cadena? Solo me aseguro de no frecuentar el lenguaje JSTL/expression a menudo – SuckerForMayhem
@Sucker: 'eq' es un alias para' == '. Ambos hacen exactamente lo mismo. Ver también [operadores en EL] (http://docs.oracle.com/javaee/6/tutorial/doc/bnaik.html). – BalusC
Funciona EXCEPTO en 1 carta Caso de comparación de cadenas. Entonces debería usar (intercambio simple para comillas dobles) http://struts.apache.org/release/2.0.x/docs/why-wont -the-if-tag-evaluate-a-one-char-string.html –
exoddus