web-dev-qa-db-fra.com

si ... sinon dans JSP ou JSTL

J'ai une sorte de question ouverte ..

Je veux avoir un code HTML basé sur la condition (desktop/ipad) .. dites Condition 1/Condition 2

Je souhaite disposer d'extraits de code HTML distincts pour chacune de ces conditions ...

if (Condition 1)
Some HTML code for con1
else if (Condition 2)
Some HTML code for con2

La condition que je veux tester (en JS) est;

var isiPad = navigator.userAgent.match(/iPad/i) != null;
if (isiPad)
{}
else
{}

Maintenant, cela doit être implémenté dans une page .jsp ...

Alors, comment je fais ça? Devrais-je utiliser JSTL? Quel est le meilleur moyen?

L’essentiel est que seul le code correspondant soit réellement chargé/rendu. si la condition 1 est vraie, le code HTML de la condition 2 ne doit pas du tout être exécuté (à part être caché dans le navigateur)

263
testndtv

Devrais-je utiliser JSTL? 

Oui.

Vous pouvez utiliser les balises <c:if> et <c:choose> pour effectuer un rendu conditionnel dans 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>
492
Jigar Joshi

Si vous souhaitez simplement produire un texte différent, un exemple plus concis serait: 

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

Il est bien plus court que c: choisissez .

164
KIR

La construction pour cela 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 balises <c:if distinctes - cela facilite la lecture.

97
Bozho

Si vous voulez 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>
9
aebersold
<%@ 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>
9
Hiren Odedra
<%@ 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>
2
Bhushan Sanghavi

Vous pouvez écrire une condition if-else dans <% %> dans des pages jsp et du code HTML en dehors 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
    <%
        }
    %>
1
Shivam

J'ai eu le même problème et je me suis dit que vous ne pouviez pas utiliser Javascript dans une condition JSTL if .

Le type de solution de contournement 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 doit être.

0
Guillaume Tako

manière simple: 

<c:if test="${condition}">
    //if
</c:if>
<c:if test="${!condition}">
    //else
</c:if>
0
Milad Heidari