Como usar a opção if-else no JSTL

Respostas:

522

Sim, mas é desajeitado como o inferno, por exemplo

<c:choose>
  <c:when test="${condition1}">
    ...
  </c:when>
  <c:when test="${condition2}">
    ...
  </c:when>
  <c:otherwise>
    ...
  </c:otherwise>
</c:choose>
skaffman
fonte
5
Além da tag wrapper (escolha), não vejo como isso é mais detalhado do que seria se / elseif / else. Uma etiqueta de embalagem dificilmente constitui "desajeitada como o inferno", não?
Steven Benitez
19
@ Steven: É a natureza XML dele. Há mais caracteres no clichê do que na lógica real.
21411 skype-em-
2
Ah ok. O mesmo poderia ser definido para <c:if/>então também.
Steven Benitez
15
Eu sei que estou um pouco atrasado para a festa, mas <c:otherwise>parece um pouco detalhado, não é?
andronikus
6
comece a aninhar a lógica com recuo apropriado e desajeitado como o inferno parecerá uma descrição muito gentil.
precisa
105

Além da resposta skaffman, simples se-else você pode usar um operador ternário como este

<c:set value="34" var="num"/>
<c:out value="${num % 2 eq 0 ? 'even': 'odd'}"/>
laksys
fonte
6
Essa é uma boa resposta, mas é altamente situacional para quão útil seria.
Mike LP
47

Não há se-mais, apenas se.

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

Opcionalmente, você pode usar escolher quando:

<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>
Menuka Ishan
fonte
Olá @iwxfer, seu link acima não está disponível no momento, atualize, se puder, como você consegue uma boa pontuação, caso contrário, remova-o.
Ajay2707
25

Eu simplesmente usei duas tags if, pensei em adicionar uma resposta, caso seja útil para qualquer outra pessoa:

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

Embora tecnicamente não seja if-elseper se, o comportamento é o mesmo e evita a abordagem desajeitada de usar a choosetag; portanto, dependendo da complexidade do seu requisito, isso pode ser preferível.

jonk
fonte
1
Considere o caso em que a condição é algo complicado e feio como $ {not param.age gt 42 e someOtherVar eq 'foobar'}. Você precisaria armazenar a condição em uma variável booleana temporária para poder fazer a condição! Ou escrever o inverso dessa condição. Ambos feios. A sintaxe "caso contrário" é um inverso garantido.
Matt queima
3
De fato, uma condição complexa exigiria uma variável local ou escrever o inverso, mas ambas as opções ainda funcionariam. Esclareci que dependeria de quão complexo é o requisito para saber se essa abordagem seria preferível à choosemarca.
jonk
2
Eu concordo com isto. Se você tiver apenas mais um, é menos fácil usar c: choose
javaMoca
1
Há outro benefício adicional de ter <c: if test = "$ {condition} == true"> e <c: if test = "$ {condition == false}">. Quando a variável é nula (não inicializada), nenhuma ramificação é executada, o que é bom. Se você escolher <c: escolha> e <c: quando>, o ramo falso será executado quando a variável for nula.
Steve Stilson
3

você precisa usar este código:

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

e

<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>
ankit
fonte
-1

Essa é uma abordagem boa e eficiente conforme a perspectiva de complexidade de tempo. Depois de obter uma condição verdadeira, não será verificada nenhuma outra após isso. Em múltiplos If, ele verificará cada condição.

   <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>
Sachin Kumar
fonte