我遇到了JSTL和空操作符的问题.我已经做了一些简单的页面,一切正常,但现在我有:
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<html>
<body>
<form action="/Projekt/myaccount" method="post">
<table border="1">
<tr>
<td>Artist</td>
<td>Record Name</td>
<td>Delete</td>
</tr>
<c:forEach var="item" items="${records}">
<tr>
<td>${item.artist}</td>
<td>${item.recordName}</td>
<td>
<input type="checkbox" name='${item.recordName}|${item.recordName}'/>
</td>
</tr>
</c:forEach>
</table>
<hr/>
<input type="submit" name="back" value="back"/>
<c:if test='${not empty "${records}"}'>
<input type="submit" name="delete" value="delete selected"/>
</c:if>
</form>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
现在无论我是否设置了记录属性,都会显示删除按钮:
<c:if test='${not empty "${records}"}'>
<input type="submit" name="delete" value="delete selected"/>
</c:if>
Run Code Online (Sandbox Code Playgroud)
在正常情况下记录属性我传递ArrayList然后使用foreach,但有时ArrayList是空的,所以在那些情况下我不希望删除按钮显示,我打了最简单的方法来实现这个就是使用这个空操作符.我哪里弄错了?
我甚至尝试手动将此属性设置为null:
if (ar.size() != 0)
request.setAttribute("records", ar);
else
request.setAttribute("records",null);
Run Code Online (Sandbox Code Playgroud)
编辑:@Qwe:是的你是对的,它之前对我有用,因为我测试了属性是否为空,它总是如此,因为我使用了错误的构造,但它起作用,因为我只是想显示一个字符串,如果没有任何字符串没有出现所以我认为一切正常.
Ole*_*eev 25
<c:if test='${not empty "${records}"}'>
以及<c:if test="${!empty '${showWarning}'}">
(从你的评论中)将始终解析为true,因为你实际上正在测试String ${records}
是否为空,显然它不是.
只是为了确定 - 通过String ${records}
我的意思是一个String值,就像你用Java一样分配它String foo = "${records}";
.
下一行代码将测试records
变量(从页面,请求,会话或应用程序范围查找)是否为空:
<c:if test="${not empty records}">
Run Code Online (Sandbox Code Playgroud)
代码行100%保证工作:)
此外,request.setAttribute("records",null)
删除属性是一种糟糕的方法,因为empty
测试不仅要求范围,还要求页面,会话等.请<c:remove var='records'/>
改用.
归档时间: |
|
查看次数: |
79533 次 |
最近记录: |