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?


1
Exampledepot tem alguns bons exemplos. Dê uma olhada> exampledepot.8waytrips.com/egs/javax.servlet.jsp.jstl.core/...
darkapple

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>

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 .


é 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.


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>

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>

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>

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>

0
<c:if test="${any_cond}" var="condition">
    //if part
</c:if>
<c:if test="${!condition}">
    //else part
</c:if>

-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>`

-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
    <%
        }
    %>

-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>

-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>


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.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.