Cómo usar la opción if-else en JSTL


Respuestas:


522

Sí, pero es torpe como el infierno, por ejemplo

<c:choose>
  <c:when test="${condition1}">
    ...
  </c:when>
  <c:when test="${condition2}">
    ...
  </c:when>
  <c:otherwise>
    ...
  </c:otherwise>
</c:choose>

55
Aparte de la etiqueta del contenedor (elegir), no veo cómo esto es más detallado de lo que sería / elseif / else. Una etiqueta de envoltorio apenas constituye "torpe como el infierno", ¿no?
Steven Benitez

19
@ Steven: es la naturaleza XML de la misma. Hay más personajes en el repetitivo que en la lógica real.
skaffman

2
Ah ok Lo mismo podría establecerse para <c:if/>entonces, también.
Steven Benitez

15
Sé que llego un poco tarde a la fiesta, pero <c:otherwise>parece un poco detallado, ¿eh?
andronikus

66
Comience a anidar la lógica con sangría adecuada y torpe como el infierno parecerá una descripción demasiado amable.
Adam Tolley

105

Además de la respuesta de skaffman, si no, puede usar un operador ternario como este

<c:set value="34" var="num"/>
<c:out value="${num % 2 eq 0 ? 'even': 'odd'}"/>

66
Esta es una buena respuesta, pero es altamente situacional por lo útil que sería.
Mike LP el

47

No hay if-else, solo if.

<c:if test="${user.age ge 40}">
 You are over the hill.
</c:if>

Opcionalmente puede usar elegir cuándo:

<c:choose>
  <c:when test="${a boolean expr}">
    do something
  </c:when>
  <c:when test="${another boolean expr}">
    do something else
  </c:when>
  <c:otherwise>
    do this when nothing else is true
  </c:otherwise>
</c:choose>

Hola @iwxfer, tu enlace anterior no está disponible en este momento, actualízalo, si puedes, como mejor puntaje, de lo contrario, elimínalo.
Ajay2707

25

Me salí con la simple utilización de dos etiquetas if, pensé que agregaría una respuesta en caso de que sea útil para alguien más:

<c:if test="${condition}">
  ...
</c:if>
<c:if test="${!condition}">
  ...
</c:if>

Aunque técnicamente no es un if-elseper se, el comportamiento es el mismo y evita el enfoque torpe de usar la chooseetiqueta, por lo que, dependiendo de cuán complejo sea su requisito, esto podría ser preferible.


1
Considere el caso cuando la condición es algo complicado y feo como $ {not param.age gt 42 y someOtherVar eq 'foobar'}. Tendría que almacenar la condición en una variable booleana temporal para poder hacer la condición !, o escribir el inverso de esa condición. Ambos feos. La sintaxis "de lo contrario" es un inverso garantizado.
Matt arde

3
De hecho, una condición compleja requeriría una variable local o escribir el inverso, pero ambas opciones seguirían funcionando. Aclaré que dependería de cuán complejo sea el requisito de si este enfoque sería preferible a la chooseetiqueta.
jonk

2
Estoy de acuerdo con ésto. Si solo tiene uno más, es menos marketing que usar c: elegir
javaMoca

1
Hay otro beneficio adicional de tener <c: if test = "$ {condition} == true"> y <c: if test = "$ {condition == false}">. Cuando la variable es nula (no inicializada), no se ejecuta ninguna rama, lo cual es bueno. Si usa <c: choose> y <c: when>, la rama falsa se ejecutará cuando la variable sea nula.
Steve Stilson

3

tienes que usar este código:

con <%@ taglib prefix="c" uri="http://www.springframework.org/tags/form"%>

y

<c:select>
            <option value="RCV"
                ${records[0].getDirection() == 'RCV' ? 'selected="true"' : ''}>
                <spring:message code="dropdown.Incoming" text="dropdown.Incoming" />
            </option>
            <option value="SND"
                ${records[0].getDirection() == 'SND'? 'selected="true"' : ''}>
                <spring:message code="dropdown.Outgoing" text="dropdown.Outgoing" />
            </option>
        </c:select>

-1

Este es un enfoque bueno y eficiente según la perspectiva de complejidad temporal. Una vez que obtenga una condición verdadera, no verificará ninguna otra después de esto. En múltiples If, verificará cada uno y condición.

   <c:choose>
      <c:when test="${condtion1}">
        do something condtion1
      </c:when>
      <c:when test="${condtion2}">
        do something condtion2
      </c:when>
      ......
      ......
      ...... 
      .......

      <c:when test="${condtionN}">
        do something condtionn N
      </c:when>


      <c:otherwise>
        do this w
      </c:otherwise>
    </c:choose>
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.