Đánh giá các thẻ c JSTL trống hoặc null


389

Làm thế nào tôi có thể xác nhận nếu a Stringlà null hoặc trống bằng cách sử dụng các cthẻ củaJSTL ?

Tôi có một biến tên var1và tôi có thể hiển thị nó, nhưng tôi muốn thêm một bộ so sánh để xác nhận nó.

<c:out value="${var1}" />

Tôi muốn xác thực khi nó là null hoặc rỗng (giá trị của tôi là chuỗi).

Câu trả lời:


763

Làm cách nào tôi có thể xác thực nếu Chuỗi không có giá trị hoặc trống bằng cách sử dụng thẻ c của JSTL?

Bạn có thể sử dụng emptytừ khóa trong <c:if>này cho:

<c:if test="${empty var1}">
    var1 is empty or null.
</c:if>
<c:if test="${not empty var1}">
    var1 is NOT empty or null.
</c:if>

Hoặc <c:choose>:

<c:choose>
    <c:when test="${empty var1}">
        var1 is empty or null.
    </c:when>
    <c:otherwise>
        var1 is NOT empty or null.
    </c:otherwise>
</c:choose>

Hoặc nếu bạn không cần phải hiển thị một cách có điều kiện một loạt các thẻ và do đó bạn chỉ có thể kiểm tra nó bên trong một thuộc tính thẻ, thì bạn có thể sử dụng toán tử điều kiện EL ${condition? valueIfTrue : valueIfFalse}:

<c:out value="${empty var1 ? 'var1 is empty or null' : 'var1 is NOT empty or null'}" />

Để tìm hiểu thêm về những ${}điều đó ( Ngôn ngữ biểu hiện , một chủ đề riêng biệt với JSTL ), hãy kiểm tra tại đây .

Xem thêm:


4
Đối với những người đang gặp vấn đề kỳ lạ với tờ séc trống, đây là một câu chuyện khó hiểu với một nguyên nhân có thể xảy ra: gayleforce.wordpress.com/2008/01/26/jstl-empty-operator
CodeReaper

9
Tóm tắt: emptykhông hoạt động Setkhi sử dụng JSTL 1.0 cổ đại. Bạn cần nâng cấp lên JSTL 1.1 (đã có từ năm 2003 rồi).
BalusC

5
@BalusC - EL có ${not empty var1}kiểm tra đồng thời cả rỗng và null không? Ý tôi là bài kiểm tra được đánh giá là đúng khi và chỉ khivar1không rỗng var1 đang không có sản phẩm nào. Có cần phải kiểm tra nullriêng không?
Sư tử

1
tương đương emptyvới ne ''
shareef

2
@shareef: không, không phải vậy. Trong trường hợp Stringgiá trị, nó tương đương với var ne null and var ne ''. Hơn nữa nó cũng hỗ trợObject , mảng, CollectionMap.
BalusC

25

để kiểm tra chuỗi trống, tôi đề nghị làm theo

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

<c:if test="${empty fn:trim(var1)}">

</c:if>

Nó cũng xử lý null


7

nếu bạn chỉ chọn null hoặc trống thì bạn có thể sử dụng tùy chọn mặc định cho việc này: <c:out default="var1 is empty or null." value="${var1}"/>


6

Mã này đúng nhưng nếu bạn đã nhập nhiều khoảng trắng ('') thay vì null hoặc chuỗi rỗng trả về false.

Để sửa lỗi này, hãy sử dụng expresion thông thường (mã này bên dưới kiểm tra xem biến là null hay trống hoặc trống giống như org.apache.commons.lang.StringUtils.isNotBlank):

<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %>
        <c:if test="${not empty description}">
            <c:set var="description" value="${fn:replace(description, ' ', '')}" />
            <c:if test="${not empty description}">
                  The description is not blank.
            </c:if>
        </c:if>

6

Đây là một lót.

Toán tử ternary bên trong EL

${empty value?'value is empty or null':'value is NOT empty or null'}

3

Bạn có thể dùng

    ${var == null}

cách khác


Không, thật không may, bạn không thể. "" Không có bất kỳ ký hiệu nào trong đó là một chuỗi rỗng nhưng không phải là null.
gdrt

1

Dưới đây là một ví dụ về cách xác thực một int và String mà bạn truyền từ Trình điều khiển Java sang tệp JSP.

MainControll.java:

@RequestMapping(value="/ImportJavaToJSP")
public ModelAndView getImportJavaToJSP() {
    ModelAndView model2= new ModelAndView("importJavaToJSPExamples");

    int someNumberValue=6;
    String someStringValue="abcdefg";
    //model2.addObject("someNumber", someNumberValue);
    model2.addObject("someString", someStringValue);

    return model2;
}

importJavaToJSPExamples.jsp

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<p>${someNumber}</p>
<c:if test="${not empty someNumber}">
    <p>someNumber is Not Empty</p>
</c:if>
<c:if test="${empty someNumber}">
    <p>someNumber is Empty</p>
</c:if>
<p>${someString}</p>
<c:if test="${not empty someString}">
    <p>someString is Not Empty</p>
</c:if>
<c:if test="${empty someString}">
    <p>someString is Empty</p>
</c:if>

Có vấn đề gì với bình luận của tôi?
Gene

-1
In this step I have Set the variable first:

<c:set var="structureId" value="<%=article.getStructureId()%>" scope="request"></c:set>

In this step I have checked the variable empty or not:

 <c:if test="${not empty structureId }">
    <a href="javascript:void(0);">Change Design</a>
 </c:if>
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.