JSTL si etiqueta para cadenas iguales


90

Tengo una variable de un objeto en mi página JSP:

<%= ansokanInfo.getPSystem() %>

El valor de la variable es NAT, que es correcto y quiero aplicar ciertos elementos de página para este valor. ¿Cómo utilizo una etiqueta para conocer el caso? Intenté algo como

<c:if test = "${ansokanInfo.getPSystem() == 'NAT'}">      
   process  
</c:if> 

Pero lo anterior no muestra nada. ¿Cómo debería hacerlo? ¿O puedo usar scriptlets es decir

<% if (ansokanInfo.getPSystem().equals("NAT"){ %>
process
<% } %>

Gracias por cualquier respuesta o comentario.


1
¿Podrías dar más detalles getPSystem()y ansokanInfo? ¿Los configura en la solicitud o accede a ellos a través de import?
Santhosh

1
IIRC I los estaba configurando en la solicitud y la solución (solución temporal) fue actualizar websphere como lo dijo BalusC y luego una versión más nueva puede invocar métodos de frijol mediante etiquetas. Estaba usando websphere estándar en la pregunta y alguna versión antes de que jsp y jstl pudieran ejecutar métodos. Encuentre mi otra pregunta donde BalusC nos dice que estaba usando una versión de websphere que necesitaba una versión más nueva para poder invocar los métodos.
Niklas R.

1
Entonces, ¿actualizó su servidor de aplicaciones a era 8? ¿Y esa solución falla?
Santhosh

@SanKrish No uso JSP ahora. Espero que funcione para usted y que se haya actualizado para las versiones más recientes del servidor de aplicaciones.
Niklas R.

Respuestas:


145

Tratar:

<c:if test = "${ansokanInfo.PSystem == 'NAT'}">

JSP / Servlet 2.4 (creo que ese es el número de versión) no admite llamadas a métodos en EL y solo admite propiedades. Los últimos contenedores de servlets admiten llamadas a métodos (es decir, Tomcat 7).


1
Actualicé mi respuesta en función de la respuesta de Jorn. Punta del sombrero para él.
Adam Gent

3
Me he rendido con JSP (X). Utilizo Moustache ( github.com/samskivert/jmustache ) o mi propio lenguaje de plantillas JATL ( code.google.com/p/jatl ).
Adam Gent

1
¿Cómo harías varias cadenas? Tiene que haber una manera mejor que<c:if test = "${ansokanInfo.PSystem == 'NAT' || ansokanInfo.PSystem == 'CAT'}">
Dillon

36
<c:if test="${ansokanInfo.pSystem eq 'NAT'}">

16

Creo que las otras respuestas pierden un detalle importante con respecto al nombre de propiedad que se usará en la expresión EL. Las reglas para convertir de nombres de métodos a nombres de propiedades se especifican en 'Introspector.decpitalize', que es parte del estándar de Java Bean:

Esto normalmente significa convertir el primer carácter de mayúsculas a minúsculas, pero en el caso especial (inusual) cuando hay más de un carácter y tanto el primer como el segundo carácter son mayúsculas, lo dejamos solo.

Por lo tanto, "FooBah" se convierte en "fooBah" y "X" se convierte en "x", pero "URL" permanece como "URL".

Entonces, en su caso, el código JSTL debería tener el siguiente aspecto, tenga en cuenta la 'P' mayúscula:

<c:if test = "${ansokanInfo.PSystem == 'NAT'}">

2
Los getters y setters con una convención de nomenclatura son prácticamente la definición de un bean Java. Supongo que necesitamos más información sobre dónde se pasa la variable al jsp. Para estar disponible para EL, tiene que estar en algún ámbito, por ejemplo, como una solicitud o un atributo pageContext. Una variable local creada por un bloque de script no estaría disponible para EL.
Jörn Horstmann

5

Puede usar scriptlets, sin embargo, este no es el camino a seguir. Hoy en día, los scriplets en línea o el código JAVA en sus archivos JSP se consideran un mal hábito.

Debería leer un poco más sobre JSTL. Si el objeto ansokanInfo está en su solicitud o en el alcance de la sesión, imprimir el objeto (método toString ()) así: $ {ansokanInfo} puede proporcionarle información básica. $ {ansokanInfo.pSystem} debería llamar al método getter de objetos. Si todo esto funciona, puede usar esto:

<c:if test="${ ansokanInfo.pSystem  == 'NAT'}"> tataa </c:if>
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.