비어 있거나 null JSTL c 태그 평가


389

Stringc태그를 사용하여 a 가 null인지 또는 비어 있는지 어떻게 확인할 수 JSTL있습니까?

이름의 변수가 var1있고 표시 할 수 있지만 비교기를 추가하여 유효성을 검사하려고합니다.

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

null이거나 비어있을 때 유효성을 검사하고 싶습니다 (내 값은 문자열 임).

답변:


763

JSTL의 c 태그를 사용하여 문자열이 null인지 또는 비어 있는지 어떻게 확인할 수 있습니까?

empty키워드를 사용할 수 있습니다 <c:if>:

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

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

또는 조건부 태그를 조건부로 렌더링 할 필요가없고 태그 속성 내에서만 태그를 확인할 수있는 경우 EL 조건부 연산자를 사용할 수 있습니다 ${condition? valueIfTrue : valueIfFalse}.

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

이들에 대한 자세한 내용은 ${}일합니다 ( 표현 언어 에서 분리 될 수 있습니다, JSTL을 ), 여기에서 확인 .

또한보십시오:


4
빈 점검에 이상한 문제가있는 사람들을 위해, 가능한 원인이있는 비린내가 있습니다 : gayleforce.wordpress.com/2008/01/26/jstl-empty-operator
CodeReaper

9
요약 : 고대 JSTL 1.0을 사용할 때는 empty작동하지 않습니다 Set. JSTL 1.1로 업그레이드해야합니다 (이미 2003 년부터).
BalusC 2016 년

5
@BalusC-EL ${not empty var1}은 비어있는 것과 null을 동시에 검사합니까? 내가하고있는 경우에만이 경우 테스트가 true로 평가되는 의미 var1입니다 하지하고 var1 있다 되지 웁니다. null별도로 확인할 필요가 없습니까?
Lion

1
이다 emptyequvilant에 NE ''
샤리프

2
@shareef : 아뇨, 그렇지 않습니다. String값의 경우 와 같습니다 var ne null and var ne ''. 또한 Object, 배열 Collection및을 지원합니다 Map.
BalusC

25

빈 문자열을 확인하려면 다음을 제안합니다.

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

또한 null을 처리합니다


7

null 또는 비어있는 경우에만 기본 옵션을 사용할 수 있습니다. <c:out default="var1 is empty or null." value="${var1}"/>


6

이 코드는 정확하지만 null 또는 빈 문자열 대신 많은 공간 ( '')을 입력하면 false를 반환합니다.

이 문제를 해결하려면 정규 expresion을 사용하십시오 (이 코드는 변수가 null이거나 비어 있거나 비어 있는지 확인합니다. 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

여기 하나의 라이너가 있습니다.

EL 내부의 3 차 연산자

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

3

당신이 사용할 수있는

    ${var == null}

대안 적으로.


안타깝게도 할 수 없습니다. ""안에 기호가 없으면 빈 문자열이지만 null이 아닙니다.
gdrt

1

다음은 Java 컨트롤러에서 JSP 파일로 전달하는 int 및 String의 유효성을 검사하는 방법에 대한 예입니다.

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

내 의견에 무슨 문제가 있습니까?
유전자

-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>
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.