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?


1
Exampledepot hat einige schöne Beispiele. Werfen
Darkapple

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>

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 .


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.


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>

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>

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>

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

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

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

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

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


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.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.