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.