空またはnullのJSTL cタグを評価する


389

Stringcタグを使用して、がnullまたは空かどうかを検証するにはどうすればよいJSTLですか?

名前の変数がvar1あり、それを表示できますが、それを検証するためにコンパレーターを追加したいと思います。

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

nullまたは空のときに検証したい(私の値は文字列です)。

回答:


763

JSTLのcタグを使用して文字列がnullまたは空かどうかを検証するにはどうすればよいですか?

このためemptyにa <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
空のチェックで奇妙な問題を抱えている人のために、考えられる原因を含む怪しい
2008

9
要約:古代のJSTL 1.0を使用emptyしているSet場合は機能しません。JSTL 1.1にアップグレードする必要があります(これはすでに2003からです)。
BalusC 2012年

5
@BalusC-EL ${not empty var1}は空とnullの両方を同時にチェックしますか?つまり、テストがtrueと評価されるのvar1は、はないヌル var1されていない空。null別途確認する必要はありませんか?
ライオン

1
emptyne '' と同等です
シャリーフ2013年

2
@shareef:いいえ、そうではありません。以下の場合Stringの値、それはと同等ですvar ne null and var ne ''。さらにObject、配列、CollectionおよびしていMapます。
BalusC 2013年

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も処理します



6

このコードは正しいですが、nullまたは空の文字列の代わりに多くのスペース( '')を入力した場合、falseを返します。

これを修正するには、通常の式を使用します(以下のコードは、変数が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内の三項演算子

${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.