jsp - test - ¿Cómo comparar dos variables de objeto en el lenguaje de expresión EL?
c if test (2)
Estoy creando una lista desplegable de todos los idiomas. La selección de idioma predeterminada para la lista se determinará según la información agregada por el usuario:
<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?
En Expression Language , puede usar el operador ==
o eq
para comparar valores de objeto. Detrás de escena, usarán el Object#equals()
. De esta manera se hace así, porque hasta que con la versión EL 2.1 actual no pueda invocar métodos con otras firmas que los métodos getter (y setter) estándar (en el próximo EL 2.2 sería posible).
Entonces la línea particular
<c:when test="${lang}.equals(${pageLang})">
debe escribirse como (tenga en cuenta que toda la expresión está dentro de {
y }
)
<c:when test="${lang == pageLang}">
o equivalente
<c:when test="${lang eq pageLang}">
Ambos están detrás de la escena más o menos interpretados como
jspContext.findAttribute("lang").equals(jspContext.findAttribute("pageLang"))
Si desea comparar valores de String
constantes, entonces debe citarlo
<c:when test="${lang == ''en''}">
o equivalente
<c:when test="${lang eq ''en''}">
que está detrás de las escenas más o menos interpretado como
jspContext.findAttribute("lang").equals("en")
No estoy seguro si te entiendo bien, pero la manera más simple sería algo como:
<c:if test="${languageBean.locale == ''en''">
<f:selectItems value="#{customerBean.selectableCommands_limited_en}" />
</c:if>
Solo una copia rápida y pegar desde una aplicación mía ...
HTH