if… else innerhalb von JSP oder JSTL

283

Ich möchte einen HTML-Code basierend auf einer Bedingung in einer JSP-Datei ausgeben.

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

Wie kann ich das machen? Soll ich JSTL verwenden?

testndtv
quelle
1
Exampledepot hat einige schöne Beispiele. Werfen
Darkapple
Mögliches Duplikat der Verwendung der Option if-else in JSTL
Alex K

Antworten:

536

Soll ich JSTL verwenden?

Ja.

Sie können <c:if>und <c:choose>Tags verwenden, um mithilfe von JSTL ein bedingtes Rendern in JSP durchzuführen.

Um zu simulieren, ob , können Sie Folgendes verwenden:

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

Um zu simulieren, ob ... sonst können Sie Folgendes verwenden:

<c:choose>
    <c:when test="${param.enter=='1'}">
        pizza. 
        <br />
    </c:when>    
    <c:otherwise>
        pizzas. 
        <br />
    </c:otherwise>
</c:choose>
Jigar Joshi
quelle
Danke dafür ... Eigentlich bin ich mehr in UI-Entwickler ... Also habe ich nicht viel Wissen über JSTL ... Könnten Sie mir bitte ein ähnliches Arbeitsbeispiel für JSTL geben ... ich meine für if
sonst
Danke für das Beispiel ... Die Bedingung, die ich habe, ist tatsächlich eine JS-Bedingung ... wenn navigator.userAgent.match (/ iPad / i)! = Null Also kann ich das direkt in die if test = "Bedingung" schreiben ..
testndtv
1
Nun, JSTL wird am Serverende ausgeführt, es wird HTML daraus
erstellen
Ok ... das ist in Ordnung ... Aber für die tatsächliche Bedingung iein the test = "condition" ... Kann ich eine JS-Bedingung angeben und wenn ja, kann ich sie direkt schreiben, z. B. kann ich <c: when test = "navigator schreiben .userAgent.match (/ iPad / i)! = null; ">
testndtv
Können Sie Ihre Frage mit der Bedingung aktualisieren, die Sie testen möchten
Jigar Joshi
170

Wenn Sie nur anderen Text ausgeben möchten, wäre ein präziseres Beispiel

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

Es ist viel kürzer als c: wählen .

KIR
quelle
ist das Javascript oder .jsp?
otherDewi
1
funktioniert es nicht, wenn eine boolesche Variable als Bedingung verwendet wird?
Adnane.T
Muss dies in ein spezielles Tag eingeschlossen werden oder einfach direkt in HTML eingefügt werden?
CodyBugstein
5
@otherDewi: Es ist JSTL, das in einer JSP-Datei verwendet werden kann. Der bedingte oder ternäre Operator existiert jedoch in vielen anderen Sprachen, einschließlich Javascript.
bergie3000
2
@ bergie3000: Nein , das ist nicht JSTL . Das ist EL .
BalusC
105

Das Konstrukt dafür ist:

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

Wenn die Bedingung nicht teuer ist, bevorzuge ich manchmal einfach zwei unterschiedliche <c:ifTags - dies erleichtert das Lesen.

Bozho
quelle
4
Kann ich davon ausgehen, dass wenn die erste Bedingung erfüllt ist, die zweite nicht ausgeführt wird?
Hop
Zunächst erhalten Sie sofort eine Inhaltsunterstützung. Und weil Webdevs es verwenden können, ohne noch ein anderes DSL zu lernen
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
quelle
10

Wenn Sie Zeichenfolgen vergleichen möchten , schreiben Sie die folgende 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
quelle
Ich denke, Sie können Methoden (wie .equals) nur für neue (ish) Container wie Tomcat 7+ aufrufen.
Ring
6

einfacher Weg :

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

Wenn Sie mit JSTL Tag Libe Folgendes tun möchten, führen Sie die folgenden Schritte aus:

[Voraussetzung] Wenn eine Zahl größer als 40 und kleiner als 50 ist, wird "Zweistellige Zahl beginnend mit 4" angezeigt, andernfalls "Andere Zahlen".

[Lösungen]

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

Sie können if-else-Bedingungen innerhalb <% %>von JSP-Seiten und HTML-Code außerhalb von schreiben<% %>

Beispielsweise:

   <%
        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
quelle
-1

Wenn Sie Zeichenfolgen vergleichen möchten, schreiben Sie die folgende 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
quelle
-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
quelle
Es kann die Lösung bieten, aber bitte erwägen Sie, einige Details mit Code hinzuzufügen
Patel Romil
-2

Ich hatte das gleiche Problem und ich dachte, Sie können Javascript nicht in einer JSTL verwenden, wenn Bedingung.

Eine Art Problemumgehung könnte in Javascript sein:

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

Sie müssen dieses Skript dort platzieren, wo der HTML-Code sein soll, den Sie schreiben möchten.

Guillaume Tako
quelle