se ... mais dentro de JSP ou JSTL

283

Eu quero produzir algum código HTML com base em alguma condição em um arquivo JSP.

if (condition 1) {
    Some HTML code specific for condition 1
}
else if (condition 2) {
    Some HTML code specific for condition 2
}

Como eu posso fazer isso? Devo usar JSTL?

testndtv
fonte
1
Exampledepot tem alguns bons exemplos. Dê uma olhada> exampledepot.8waytrips.com/egs/javax.servlet.jsp.jstl.core/...
darkapple
Possível duplicata Como usar if-else opção no JSTL
Alex K

Respostas:

536

Devo usar JSTL?

Sim.

Você pode usar tags <c:if>e <c:choose>para fazer renderização condicional no jsp usando JSTL.

Para simular se , você pode usar:

<c:if test="condition"></c:if>

Para simular se ... mais , você pode usar:

<c:choose>
    <c:when test="${param.enter=='1'}">
        pizza. 
        <br />
    </c:when>    
    <c:otherwise>
        pizzas. 
        <br />
    </c:otherwise>
</c:choose>
Jigar Joshi
fonte
Thx para isso ... Na verdade, eu estou mais interessado em UI dev ... Portanto, não tenho muito conhecimento de JSTL .. Você poderia me fornecer um exemplo de trabalho semelhante de JSTL .. Quero dizer para if..else
testndtv
Thx para o exemplo .. A condição que eu tenho é realmente uma condição JS .. se navigator.userAgent.match (/ iPad / i)! = Null Então, eu posso escrever isso diretamente no if test = "condition" ..
testndtv
1
bem JSTL irá executar no final servidor que vai caixote HTML fora dela e passá-lo para o cliente
Jigar Joshi
Ok ... tudo bem ... Mas para a condição real, por exemplo, no teste = "condição" ... Posso especificar qualquer condição JS e, se sim, posso escrevê-la diretamente, por exemplo, posso escrever <c: when test = "navigator .userAgent.match (/ iPad / i)! = null; ">
testndtv
você pode atualizar sua pergunta com a condição que deseja teste
Jigar Joshi
170

Se você quiser apenas produzir um texto diferente, um exemplo mais conciso seria

${condition ? "some text when true" : "some text when false"}

É muito menor que c: escolha .

KIR
fonte
é javascript ou .jsp?
otherDewi
1
não funciona ao usar uma variável booleana como condição alguma sugestão?
precisa saber é o seguinte
Isso precisa ser incluído em uma tag especial ou basta colá-la diretamente no HTML?
CodyBugstein
5
@otherDewi: é JSTL, que pode ser usado em um arquivo JSP. O operador condicional ou ternário existe em muitos outros idiomas, incluindo Javascript.
precisa saber é o seguinte
2
@ bergie3000: Não , isso não é JSTL . Este é EL .
BalusC
105

A construção para isso é:

<c:choose>
   <c:when test="${..}">...</c:when> <!-- if condition -->
   <c:when test="${..}">...</c:when> <!-- else if condition -->
   <c:otherwise>...</c:otherwise>    <!-- else condition -->
</c:choose>

Se a condição não for cara, às vezes eu prefiro simplesmente usar duas <c:iftags distintas - facilita a leitura.

Bozho
fonte
4
Posso assumir que, se primeiro quando a condição for satisfeita, o segundo quando não será executado?
hop
porque você obtém o assistente de conteúdo pronto para uso, para começar. E porque webdevs pode usá-lo sem aprender ainda-another-DSL
Bozho
11
<%@ taglib prefix='c' uri='http://java.sun.com/jsp/jstl/core' %>
<c:set var="val" value="5"/>
<c:choose> 
  <c:when test="${val == '5'}">
    Value is 5
  </c:when>
  <c:otherwise>
    Value is not 5
  </c:otherwise>
</c:choose>
Hiren Odedra
fonte
10

Caso você queira comparar cadeias , escreva o seguinte JSTL:

<c:choose>
    <c:when test="${myvar.equals('foo')}">
        ...
    </c:when>
    <c:when test="${myvar.equals('bar')}">
        ...
    </c:when>
    <c:otherwise>
        ...
    </c:otherwise>
</c:choose>
aebersold
fonte
Eu acho que você só pode invocar métodos (como .equals) em novos contêineres (ish), como o Tomcat 7+.
Anel
6

maneira simples :

<c:if test="${condition}">
    //if
</c:if>
<c:if test="${!condition}">
    //else
</c:if>
Milad Heidari
fonte
2
<%@ taglib prefix='c' uri='http://java.sun.com/jsp/jstl/core' %>
<c:set var="isiPad" value="value"/>
<c:choose>
   <!-- if condition -->
   <c:when test="${...}">Html Code</c:when> 
   <!-- else condition -->
   <c:otherwise>Html code</c:otherwise>   
</c:choose>
Bhushan Sanghavi
fonte
0
<c:if test="${any_cond}" var="condition">
    //if part
</c:if>
<c:if test="${!condition}">
    //else part
</c:if>
Sachin Kumar
fonte
-1

Se você deseja fazer o seguinte usando o JSTL Tag Libe, siga as seguintes etapas:

[Requisito] se um número for maior que 40 e menor que 50, apresente "Número de dois dígitos começando com 4", caso contrário "Outros números".

[Soluções]

1. Please Add the JSTL tag lib on the top of the page.`
     <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>`

2. Please Write the following code
`
<c:choose>
       <c:when test="${params.number >=40 && params.number <50}">
              <p> Two digit number starting with 4. </p>
       </c:when>
       <c:otherwise>
              <p> Other numbers. </p>
       </c:otherwise>
  </c:choose>`
user3466950
fonte
-1

Você pode escrever a condição if-else dentro <% %>das páginas jsp e o código html fora de<% %>

Por exemplo:

   <%
        String username = (String)session.getAttribute("username");
        if(username==null)  {
    %>            
        <p> username is null</p> //html code
    <%
        } else {
    %>
        <p> username is not null</p> //html code
    <%
        }
    %>
Shivam
fonte
-1

Caso você queira comparar cadeias, escreva o seguinte JSTL:

<c:choose>
    <c:when test="${myvar.equals('foo')}">
        ...
    </c:when>
    <c:when test="${myvar.equals('bar')}">
        ...
    </c:when>
    <c:otherwise>
        ...
    </c:otherwise>
</c:choose>
Mohammad Sherafatian
fonte
-1
<c:choose>
<c:when test="${not empty userid and userid ne null}">
      <sql:query dataSource="${dbsource}" var="usersql">
                SELECT * FROM newuser WHERE ID = ?;
                <sql:param value="${param.userid}" />
      </sql:query>
 </c:when>
 <c:otherwise >
       <sql:query dataSource="${dbsource}" var="usersql">
                 SELECT * FROM newuser WHERE username = ?;
                 <sql:param value="${param.username}" />
       </sql:query>                              
  </c:otherwise>

Aman Kumar
fonte
Ele pode fornecer a solução, mas por favor, considere a adição de alguns detalhes com o código
Patel Romil
-2

Eu tive o mesmo problema e eu achei que você não pode usar Javascript em uma JSTL se condição.

O tipo de solução alternativa pode estar em Javascript:

<script>

    var isiPad = navigator.userAgent.match(/iPad/i) != null;

    if (isiPad) {
        document.write("Some HTML code for con1");
    } else {
        document.write("Some HTML code for con2");
    }

</script>

Você precisará colocar esse script onde deve estar o código html.

Guillaume Tako
fonte