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.