<c:if test='${nicht leer "${records}"}'> nie falsch
Ich habe ein problem mit JSTL und leer-operator. Ich habe bereits einige einfache Seiten und alles hat gut funktioniert, aber nun habe ich:
<%@ 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>
nun egal, wenn ich die Datensätze Attribut oder nicht, die löschen-Schaltfläche wird:
<c:if test='${not empty "${records}"}'>
<input type="submit" name="delete" value="delete selected"/>
</c:if>
in einer normalen situation, um Datensätze Attribut passiere ich die ArrayList und dann foreach verwenden, aber manchmal ArrayList ist leer, so dass in diesen Situationen, die ich nicht wollen, löschen-Taste, zu zeigen, kämpfte ich, dass der einfachste Weg, dies zu erreichen, wäre die Verwendung dieser leer-operator. Wo bin ich einen Fehler zu machen?
Ich habe sogar versucht, manuell setzen Sie dieses Attribut auf null:
if (ar.size() != 0)
request.setAttribute("records", ar);
else
request.setAttribute("records",null);
BEARBEITEN:
@Qwe: ja du hast Recht, es hat bei mir vor, weil ich getestet habe, wenn Attribut leer war in meinem Weg, es war immer wahr, weil ich falsch konstruieren, aber es funktioniert, weil ich nur zeigen wollte, einen string, wenn es keine String nichts auftauchte, so dass ich dachte, dass alles geklappt hat.
Du musst angemeldet sein, um einen Kommentar abzugeben.
<c:if test='${not empty "${records}"}'>
sowie<c:if test="${!empty '${showWarning}'}">
(aus Ihrem Kommentar) wird immer beheben zu wahr, weil man eigentlich testen, ob ein String${records}
leer ist oder nicht, und offensichtlich ist es nicht.Nur um sicher zu sein - durch die String -
${records}
ich meine einen String-Wert, so als ob Sie waren zuweisen im Java wieString foo = "${records}";
.Die nächste Codezeile zu testen, ob
records
variable (das ist, sah von der Seite, request -, session-oder application-scope) leer ist oder nicht:Zeile code ist zu 100% garantiert, um zu arbeiten 🙂
Auch
request.setAttribute("records",null)
ist ein schlechter Weg, um die Attribute entfernen, weilempty
tests nicht nur fordern Umfang, aber Seite, Sitzung etc. Verwenden<c:remove var='records'/>
statt.