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?

testndtv
źródło
1
Exampledepot ma kilka dobrych przykładów. Sprawdźcie> exampledepot.8waytrips.com/egs/javax.servlet.jsp.jstl.core/...
darkapple
Możliwy duplikat Jak korzystać z opcji if-else w JSTL
Alex K

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>
Jigar Joshi
źródło
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 .

KIR
źródło
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.

Bozho
źródło
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>
Hiren Odedra
źródło
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>
Aebersold
źródło
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>
Milad Heidari
źródło
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
źródło
0
<c:if test="${any_cond}" var="condition">
    //if part
</c:if>
<c:if test="${!condition}">
    //else part
</c:if>
Sachin Kumar
źródło
-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>`
użytkownik3466950
źródło
-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
    <%
        }
    %>
Shivam
źródło
-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>
Mohammad Sherafatian
źródło
-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
źródło
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ć.

Guillaume Tako
źródło