2013-01-23 90 views
36

Thẻ sau đây của JSTL có thể được sử dụng để đặt giá trị cho một biến trong phạm vi yêu cầu.Toán tử bậc ba trong JSTL/EL

<c:set var="value" scope="request" value="someValue"/> 

Tôi muốn kiểm tra điều kiện, nếu biến value được thiết lập là trống hay không và hiển thị kết quả phù hợp một cái gì đó như sau, sử dụng <c:when>...</c:when>.

<c:choose> 
    <c:when test="${not empty value}"> 
     <c:out default="None" value="${value}"/> 
    </c:when> 
    <c:otherwise> 
     <c:out default="None" value="None"/> 
    </c:otherwise> 
</c:choose> 

tôi muốn giảm bớt dòng mã sử dụng một biểu ternary như,

<c:out default="None" value="${not empty value ? value : 'None'}"/> 

Nó được đánh giá là nó thực sự có nghĩa nhưng nếu tôi trao đổi thứ tự của các biểu thức như thế nào,

<c:out default="None" value="${empty value ? 'None' : value}"/> 

thì đó là lỗi cú pháp cho biết,

"$ {trống giá trị 'Không': giá trị}" chứa biểu hiện không hợp lệ (s): javax.el.ELException: Lỗi Parsing: $ {giá trị rỗng 'Không': giá trị}

Vậy tại sao điều này có xảy ra không?


Tôi đang sử dụng thư viện JSTL 1.1 và taglib sau được bao gồm,

<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%> 
+0

Tôi đã sao chép và dán mã của bạn và nó hoạt động cho tôi mà không có lỗi. – rickz

+0

@rickz - Nó ** có thể ** là vấn đề với phiên bản thư viện của JSTL mà tôi đang sử dụng. Bạn đang sử dụng thư viện nào? – Tiny

+0

Tôi đang sử dụng 1.2. – rickz

Trả lời

43

Tôi đã thử nghiệm trang sau trong Tomcat 5,59, JSP 2.0 và JSTL 1.1. Nó chạy mà không có bất kỳ lỗi nào.

<%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%> 
<c:set var="value" scope="request" value="someValue"/> 
<c:out default="None" escapeXml="true" value="${not empty value ? value : 'None'}" /> 
<c:out default="None" escapeXml="true" value="${empty value ? 'None' : value}" /> 
<c:set var="value" scope="request" value="" /> 
<br/> 
<c:out default="None" escapeXml="true" value="${not empty value ? value : 'None'}" /> 
<c:out default="None" escapeXml="true" value="${empty value ? 'None' : value}" /> 
+1

Gần đây tôi đã tải xuống [NetBeans 7.2.1] (http://netbeans.org/downloads/) và [jdk 7] (http://www.oracle.com/technetwork/java/javase/downloads/jdk7-downloads -1880260.html) và cấu hình lại toàn bộ ứng dụng tôi đang làm việc với tất cả từ đầu. NetBeans 7.2.1 có Apache Tomcat 7.0.27.0 (trước đây là 6.0.26.0 với NetBeans 6.9.1) hỗ trợ Servlet 3.0 (trước đó là 2.5), nơi mà vấn đề được đề cập biến mất. Tôi không thay đổi thư viện JSTL. Nó vẫn là JSTL 1.1 như trước đây. – Tiny

Các vấn đề liên quan