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)
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>
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 .
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.
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>
<%@ 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>
<%@ 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>
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
<%
}
%>
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.
manière simple:
<c:if test="${condition}">
//if
</c:if>
<c:if test="${!condition}">
//else
</c:if>