Cách sử dụng tùy chọn if-other trong JSTL


Câu trả lời:


520

Vâng, nhưng nó thật rắc rối như địa ngục, vd

<c:choose>
  <c:when test="${condition1}">
    ...
  </c:when>
  <c:when test="${condition2}">
    ...
  </c:when>
  <c:otherwise>
    ...
  </c:otherwise>
</c:choose>

5
Ngoài thẻ trình bao bọc (chọn), tôi không thấy điều này dài dòng hơn so với if / otherif / other. Một thẻ bao bọc hầu như không cấu thành 'cục mịch như địa ngục', phải không?
Steven Benitez

19
@Steven: Đó là bản chất XML của nó. Có nhiều ký tự trong bảng kê hơn so với logic thực tế.
skaffman

2
À, được rồi Điều tương tự cũng có thể được đặt ra <c:if/>sau đó.
Steven Benitez

15
Tôi biết tôi đến bữa tiệc muộn một chút, nhưng <c:otherwise>có vẻ hơi dài dòng, nhỉ?
andronikus

6
bắt đầu logic lồng nhau với thụt lề thích hợp và vụng về như địa ngục sẽ có vẻ quá mô tả.
Adam Tolley

105

Ngoài câu trả lời của skaffman, nếu đơn giản, bạn có thể sử dụng toán tử ternary như thế này

<c:set value="34" var="num"/>
<c:out value="${num % 2 eq 0 ? 'even': 'odd'}"/>

6
Đây là một câu trả lời tốt, nhưng có tính tình huống cao cho việc nó sẽ hữu ích như thế nào.
Mike LP

47

Không có nếu - khác, chỉ là nếu.

<c:if test="${user.age ge 40}">
 You are over the hill.
</c:if>

Tùy chọn bạn có thể sử dụng select-when:

<c:choose>
  <c:when test="${a boolean expr}">
    do something
  </c:when>
  <c:when test="${another boolean expr}">
    do something else
  </c:when>
  <c:otherwise>
    do this when nothing else is true
  </c:otherwise>
</c:choose>

Xin chào @iwxfer, liên kết trên của bạn hiện không có sẵn, vui lòng cập nhật, nếu bạn có thể đạt điểm cao, hãy xóa nó đi.
Ajay2707

25

Tôi đã bỏ đi chỉ bằng cách sử dụng hai thẻ if, nghĩ rằng tôi sẽ thêm câu trả lời trong trường hợp nó được sử dụng cho bất kỳ ai khác:

<c:if test="${condition}">
  ...
</c:if>
<c:if test="${!condition}">
  ...
</c:if>

Mặc dù về mặt kỹ thuật không phải là một if-elsehành vi, hành vi là như nhau và tránh cách tiếp cận vụng về của việc sử dụng choosethẻ, do đó tùy thuộc vào mức độ phức tạp của yêu cầu của bạn, điều này có thể thích hợp hơn.


1
Hãy xem xét trường hợp khi điều kiện là một cái gì đó phức tạp và xấu xí như $ {không phải param.age gt 42 và someOtherVar eq 'foobar'}. Bạn sẽ phải lưu điều kiện vào một biến boolean tạm thời để bạn có thể làm điều kiện! Hoặc viết ngược lại điều kiện đó. Cả hai xấu xí. Cú pháp "nếu không" là một nghịch đảo được đảm bảo.
matt bị bỏng

3
Thật vậy, một điều kiện phức tạp sẽ yêu cầu một biến cục bộ hoặc viết ngược lại, nhưng cả hai tùy chọn này vẫn sẽ hoạt động. Tôi đã làm rõ rằng nó sẽ phụ thuộc vào mức độ phức tạp của yêu cầu như cách tiếp cận này có thích hợp hơn so với choosethẻ không.
jonk

2
Tôi đồng ý với điều này. Nếu bạn chỉ có một người khác, thì ít markeup hơn, sau đó sử dụng c:
select

1
Có một lợi ích khác khi có <c: if test = "$ {condition} == true"> và <c: if test = "$ {condition == false}">. Khi biến là null (không được khởi tạo), không có nhánh nào được thực thi, điều này là tốt. Nếu bạn đi với <c: select> và <c: when>, nhánh sai sẽ được thực thi khi biến là null.
Steve Stilson

3

bạn phải sử dụng mã này:

với <%@ taglib prefix="c" uri="http://www.springframework.org/tags/form"%>

<c:select>
            <option value="RCV"
                ${records[0].getDirection() == 'RCV' ? 'selected="true"' : ''}>
                <spring:message code="dropdown.Incoming" text="dropdown.Incoming" />
            </option>
            <option value="SND"
                ${records[0].getDirection() == 'SND'? 'selected="true"' : ''}>
                <spring:message code="dropdown.Outgoing" text="dropdown.Outgoing" />
            </option>
        </c:select>

-1

Đây là cách tiếp cận tốt và hiệu quả theo triển vọng phức tạp theo thời gian. Một khi nó sẽ có được một điều kiện thực sự, nó sẽ không kiểm tra bất kỳ điều gì khác sau này. Trong nhiều Nếu, nó sẽ kiểm tra từng và điều kiện.

   <c:choose>
      <c:when test="${condtion1}">
        do something condtion1
      </c:when>
      <c:when test="${condtion2}">
        do something condtion2
      </c:when>
      ......
      ......
      ...... 
      .......

      <c:when test="${condtionN}">
        do something condtionn N
      </c:when>


      <c:otherwise>
        do this w
      </c:otherwise>
    </c:choose>
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.