si… sinon dans JSP ou JSTL

283

Je veux sortir du code HTML basé sur une condition dans un fichier JSP.

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

Comment puis je faire ça? Dois-je utiliser JSTL?

testndtv
la source
1
Exampledepot a de beaux exemples. Jetez un œil> exampledepot.8waytrips.com/egs/javax.servlet.jsp.jstl.core/…
darkapple
Duplication possible de l' option Comment utiliser if-else dans JSTL
Alex K

Réponses:

536

Dois-je utiliser JSTL?

Oui.

Vous pouvez utiliser les balises <c:if>et <c:choose>pour effectuer un rendu conditionnel en jsp à l'aide de JSTL.

Pour simuler si , vous pouvez utiliser:

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

Pour simuler si ... sinon , vous pouvez utiliser:

<c:choose>
    <c:when test="${param.enter=='1'}">
        pizza. 
        <br />
    </c:when>    
    <c:otherwise>
        pizzas. 
        <br />
    </c:otherwise>
</c:choose>
Jigar Joshi
la source
Thx pour cela ... En fait, je suis plus dans le développement d'interface utilisateur ... Donc, je n'ai pas beaucoup de connaissances sur JSTL..Pouvez-vous s'il vous plaît me fournir un exemple de travail similaire de JSTL..Je veux dire pour if..else
testndtv
Thx pour l'exemple..La condition que j'ai est en fait une condition JS..si navigator.userAgent.match (/ iPad / i)! = Null Je peux donc l'écrire directement dans if test = "condition" ..
testndtv
1
bien JSTL s'exécutera à la fin du serveur, il en créera du HTML et le transmettra au client
Jigar Joshi
Ok .. c'est très bien ... Mais pour la condition réelle iein le test = "condition" ... Puis-je spécifier n'importe quelle condition JS et si oui, puis-je l'écrire directement par exemple Puis-je écrire <c: lorsque test = "navigateur .userAgent.match (/ iPad / i)! = null; ">
testndtv
pouvez-vous mettre à jour votre question avec la condition que vous souhaitez tester
Jigar Joshi
170

Si vous voulez simplement sortir un texte différent, un exemple plus concis serait

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

C'est bien plus court que c: choisissez .

KIR
la source
est-ce javascript ou .jsp?
otherDewi
1
ne fonctionne pas lors de l'utilisation d'une variable booléenne comme condition suggérée?
Adnane.T
Doit-il être placé dans une balise spéciale, ou simplement le coller directement en HTML?
CodyBugstein
5
@otherDewi: C'est JSTL, qui peut être utilisé dans un fichier JSP. L'opérateur conditionnel ou ternaire existe cependant dans de nombreuses autres langues, y compris Javascript.
bergie3000
2
@ bergie3000: Non , ce n'est pas JSTL . C'est EL .
BalusC
105

La construction de ceci est:

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

Si la condition n'est pas chère, je préfère parfois simplement utiliser deux <c:ifbalises distinctes - cela facilite la lecture.

Bozho
la source
4
Puis-je supposer que si le premier lorsque la condition est remplie, le second quand ne sera pas exécuté?
hop
parce que vous obtenez une assistance de contenu prête à l'emploi, pour commencer. Et parce que les webdev peuvent l'utiliser sans apprendre encore-un-autre-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
la source
10

Si vous souhaitez comparer des chaînes , écrivez le JSTL suivant:

<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
la source
Je pense que vous ne pouvez invoquer des méthodes (comme .equals) que sur de nouveaux conteneurs (ish), comme Tomcat 7+.
Anneau
6

manière simple:

<c:if test="${condition}">
    //if
</c:if>
<c:if test="${!condition}">
    //else
</c:if>
Milad Heidari
la source
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
la source
0
<c:if test="${any_cond}" var="condition">
    //if part
</c:if>
<c:if test="${!condition}">
    //else part
</c:if>
Sachin Kumar
la source
-1

Si vous souhaitez effectuer les opérations suivantes à l'aide de JSTL Tag Libe, veuillez suivre les étapes suivantes:

[Exigence] si un nombre est une râpe égale à 40 et inférieure à 50, afficher "Numéro à deux chiffres commençant par 4" sinon "Autres numéros".

[Solutions]

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
la source
-1

Vous pouvez écrire la condition if-else à l'intérieur <% %>dans les pages jsp et le code html à l'extérieur de<% %>

Par exemple:

   <%
        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
la source
-1

Si vous souhaitez comparer des chaînes, écrivez le JSTL suivant:

<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
la source
-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
la source
Cela peut fournir la solution, mais pensez à ajouter des détails avec le code
Patel Romil
-2

J'ai eu le même problème et je pensais que vous ne pouvez pas utiliser Javascript dans un JSTL si condition.

Une sorte de solution pourrait être en 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>

Vous devrez mettre ce script là où le code html que vous voulez écrire devrait être.

Guillaume Tako
la source