ChatGPT解决这个技术问题 Extra ChatGPT

评估空或空 JSTL c 标签

如何使用 JSTLc 标签验证 String 是否为空或为空?

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

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

我想验证它何时为空或为空(我的值是字符串)。


C
Community

如何使用 JSTL 的 c 标签验证 String 是否为空或为空?

为此,您可以在 <c:if> 中使用 empty 关键字:

<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'}" />

要了解有关这些 ${} 的更多信息(Expression Language,它是与 JSTL 不同的主题),check here

也可以看看:

EL 空运算符在 JSF 中是如何工作的?


对于对空支票有奇怪问题的人,这里有一个可疑的故事,可能的原因是:gayleforce.wordpress.com/2008/01/26/jstl-empty-operator
总结:当使用古老的 JSTL 1.0 时,empty 不适用于 Set。您需要升级到 JSTL 1.1(从 2003 年开始)。
@BalusC - EL ${not empty var1} 是否同时检查空和空?我的意思是当且仅当 var1not null 并且 var1not 为空时,测试才被评估为 true。不需要单独检查 null 吗?
empty 等价于 ne ' '
@shareef:不,不是。对于 String 值,它等效于 var ne null and var ne ''。此外,它还支持 Object、数组、CollectionMap
a
andro83

还要检查空白字符串,我建议以下

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

它还处理空值


A
Ankit Agarwal

如果您只检查 null 或空,那么您可以使用 with default 选项:<c:out default="var1 is empty or null." value="${var1}"/>


R
Rija Ramampiandra

此代码是正确的,但如果您输入大量空格 (' ') 而不是 null 或空字符串,则返回 false。

要更正此问题,请使用正则表达式(下面的代码检查变量是否为空、空或空白,与 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>

S
Sorter

这是一个班轮。

EL 中的三元运算符

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

S
Supun Dharmarathne

您可以使用

    ${var == null}

或者。


不,不幸的是,你不能。没有任何符号的“”是一个空字符串,但不为空。
G
Gene

下面是一个如何验证从 Java 控制器传递到 JSP 文件的 int 和 String 的示例。

主控制器.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>

我的评论有什么问题?
A
ASR
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>