JSTL:检查字符串是否为空

14

我正在尝试在JSTL中测试一个会话属性是否为空。然而,如果该属性为空,JSTL会将其视为非空属性。

这是我正在尝试用JSTL替换的硬编码。此代码正常工作:

<% if (request.getAttribute("error") != null) { %>
    <div class="alert alert-danger">
        <strong>Oh snap, something's wrong, maybe the following error could help you out?<br /></strong>
        <%= request.getAttribute("error")%>
    </div>
<% } %>

这是我如何使用JSTL替换它的方法。在检查时,错误属性不为空,但实际上它是空的。

<c:if test="${not empty sessionScope.error}">
    <div class="alert alert-danger">
        <strong>Oh snap, something's wrong, maybe the following error could help you out?<br /></strong>
        <c:out value="${sessionScope.error}" />
    </div>
</c:if>

你是否已经添加了 JSTL 库? - gyanu
2
你是否在页面中导入了JSTL标签 **<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>**? - gyanu
那确实是问题所在。我为此疑难解答了一个多小时。谢谢 :) - DaanCelie
1
@gyanu 编辑您的帖子并添加实际解决方案。 - Braj
我做到了。希望我的答案能被接受。谢谢。 - gyanu
2个回答

14

添加JSTL库并声明核心标签库:

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

JSTL的等效语句为

<% if (request.getAttribute("error") != null) { %>

是什么

<c:if test="${not empty error}">

OP正在以同样的方式进行。 - Braj
尝试删除requestScope,但问题仍然存在。 - DaanCelie

1

我正在尝试在JSTL中测试session属性是否为空

必须在session范围内检查,而不是在请求范围内。

应该是:

<c:if test="${not empty sessionScope.error}">

代替

<c:if test="${not empty requestScope.error}">

如果您不确定作用域,则使用没有范围的选项,这将从底部到顶部查找所有范围(页面,请求,会话,最后在应用程序中)

<c:if test="${not empty error}">

更改了代码,但问题仍然存在。我还尝试删除作用域,但也没有起作用。我非常确定该属性为空,因为我保留了旧代码,并且该代码未生成任何内容。 - DaanCelie
看看我编辑过的帖子。分享一下你设置属性的代码。也许 error 不是正确的属性名称。 - Braj
1
${not empty null}${not empty ""} 返回 false - Braj
问题已经解决。<shame>我忘记添加库了。</shame>我为此进行了一个多小时的故障排除。虽然谢谢你的帮助,但很抱歉浪费了你的时间。 - DaanCelie
哦,糊涂了。我没想到你会这样。 - Braj

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接