评估空或空的JSTL c标签


389

我如何验证是否 String使用c标签为空还是空JSTL

我有一个名称变量,var1可以显示它,但是我想添加一个比较器来验证它。

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

我想验证它为null还是空(我的值是字符串)。

Answers:


763

如何使用JSTL的c标签验证String为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>

或者,如果您不需要有条件地渲染一堆标签,因此只能在tag属性中检查它,则可以使用EL条件运算符${condition? valueIfTrue : valueIfFalse}

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

要了解有关这些${}内容的更多信息(表达语言,它是与JSTL分离的主题),请点击此处

也可以看看:


4
对于那些空支票有奇怪问题的人,这里有一个可能是诱人的
CodeReaper 2012年

9
总结:在使用古老的JSTL 1.0时empty不起作用Set。您需要升级到JSTL 1.1(已经从2003开始)。
BalusC 2012年

5
@BalusC-EL ${not empty var1}是否同时检查空值和null?我的意思是,当且仅当测试进行评估,以真正var1不是 var1空。无需null单独检查吗?
Lion

1
emptyequvilant到NE ''
谢里夫

2
@shareef:不,不是。如果是String值,则等同于var ne null and var ne ''。此外,它还支持Object,数组CollectionMap
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>

它还处理空值



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>
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.