jeśli… jeszcze w JSP lub JSTL


283

Chcę wygenerować kod HTML oparty na pewnych warunkach w pliku JSP.

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

Jak mogę to zrobić? Czy powinienem używać JSTL?


1
Exampledepot ma kilka dobrych przykładów. Sprawdźcie> exampledepot.8waytrips.com/egs/javax.servlet.jsp.jstl.core/...
darkapple

Odpowiedzi:


536

Czy powinienem używać JSTL?

Tak.

Możesz użyć tagów <c:if>i <c:choose>do warunkowego renderowania w jsp przy użyciu JSTL.

Do symulacji , jeśli można użyć:

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

Aby zasymulować, jeśli ... jeszcze , możesz użyć:

<c:choose>
    <c:when test="${param.enter=='1'}">
        pizza. 
        <br />
    </c:when>    
    <c:otherwise>
        pizzas. 
        <br />
    </c:otherwise>
</c:choose>

Dzięki za to ... Właściwie jestem bardziej zainteresowany tworzeniem interfejsu użytkownika ... Więc nie mam dużej wiedzy na temat JSTL .. Czy mógłbyś podać mi podobny działający przykład JSTL .. Mam na myśli if..else
testndtv

Dzięki za przykład .. Warunek, który mam, to tak naprawdę warunek JS .. jeśli navigator.userAgent.match (/ iPad / i)! = Null Więc mogę napisać to bezpośrednio w if test = "warunek" ..
testndtv

1
dobrze JSTL wykona się na końcu serwera,
wykasuje

Ok ... to dobrze ... Ale dla rzeczywistego warunku, tj. W teście = "warunek" ... Czy mogę określić dowolny warunek JS, a jeśli tak, czy mogę go napisać bezpośrednio, np. Czy mogę napisać nawigator <c: when test = " .userAgent.match (/ iPad / i)! = null; ">
testndtv

czy możesz zaktualizować swoje pytanie o warunek, który chcesz przetestować
Jigar Joshi

170

Jeśli chcesz wydrukować inny tekst, bardziej zwięzły przykład to

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

Jest o wiele krótszy niż c: wybierz .


to jest javascript lub .jsp?
inneDewi

1
nie działa, gdy używasz zmiennej boolean jako warunek jakikolwiek sugeruje?
Adnane.T

Czy to musi być zawarte w specjalnym tagu, czy po prostu wkleić to bezpośrednio do HTML?
CodyBugstein

5
@otherDewi: To JSTL, którego można użyć w pliku JSP. Operator warunkowy lub trójskładnikowy istnieje jednak w wielu innych językach, w tym JavaScript.
bergie3000,

2
@ bergie3000: Nie , to nie jest JSTL . To jest EL .
BalusC

105

Konstrukcja tego jest następująca:

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

Jeśli warunek nie jest drogi, czasami wolę po prostu użyć dwóch różnych <c:ifznaczników - ułatwia to czytanie.


4
Czy mogę założyć, że jeśli pierwszy raz zostanie spełniony warunek, to drugi, kiedy nie zostanie wykonany?
hop

ponieważ na początku otrzymujesz pomoc dotyczącą zawartości od razu po wyjęciu z pudełka. A ponieważ webdevowie mogą z niego korzystać bez nauki jeszcze innego dsl
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

Jeśli chcesz porównać ciągi , napisz następujący plik 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>

Myślę, że możesz wywoływać metody (takie jak .equals) tylko w nowych (ish) kontenerach, takich jak Tomcat 7+.
Zadzwoń

6

prosta droga :

<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

Jeśli chcesz wykonać następujące czynności przy użyciu biblioteki JSTL Tag Libe, wykonaj następujące kroki:

[Wymaganie] jeśli liczba jest większa niż 40 i mniejsza niż 50, wówczas wyświetla się „Liczba dwucyfrowa zaczynająca się od 4”, w przeciwnym razie „Inne liczby”.

[Rozwiązania]

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

Możesz napisać warunek if-else wewnątrz <% %>stron jsp i kodu HTML poza<% %>

Na przykład:

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

Jeśli chcesz porównać ciągi, napisz następujący plik 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>


Może dostarczyć rozwiązanie, ale proszę rozważyć dodanie kilku szczegółów z kodem
Patel Romil,

-2

Miałem ten sam problem i pomyślałem, że nie możesz używać Javascript w JSTL, jeśli warunek.

Rodzajem obejścia może być 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>

Musisz umieścić ten skrypt w miejscu kodu HTML, który chcesz napisać.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.