我正在尝试确保对象列表不为null并且其中至少包含一个项目。请告诉我我在下面的代码片段做错了什么。
<c:if test=" ${ (not empty educations) && (fn:length(educations) ge 1) }">
<c:forEach items="${educations}" var="edu">
<div class="educations">
<label>Position</label><input type="text" name="${ edu.index }" /><br/>
<label>School</label><input type="text" name="${ edu.school }" /><br/>
<label>Degree</label><input type="text" name="${ edu.degree }" /><br/>
<label>GPA</label><input type="text" name="${ edu.scored }" /><br/>
<label>Start Date</label><input type="text" name="${ edu.startDate }" /><br/>
<label>End Date</label><input type="text" name="${ edu.endDate }" /><br/>
</div>
</c:forEach>
</c:if>
我发现它在调试的if语句处停止了,即使教育列表中有项目,也没有呈现内部的hmlt标签
答案 0 :(得分:1)
您是否正确包含了JSTL功能?
<%@taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions"%>
并且在访问任何变量之前还要添加前缀requestScope。
<c:if test=" ${not empty requestScope.educations}">
<c:forEach items="${requestScope.educations}" var="edu">
<div class="educations">
<label>Position</label><input type="text" name="${ edu.index }" /><br/>
<label>School</label><input type="text" name="${ edu.school }" /><br/>
<label>Degree</label><input type="text" name="${ edu.degree }" /><br/>
<label>GPA</label><input type="text" name="${ edu.scored }" /><br/>
<label>Start Date</label><input type="text" name="${ edu.startDate }" /><br/>
<label>End Date</label><input type="text" name="${ edu.endDate }" /><br/>
</div>
</c:forEach>
</c:if>
如果只进行empty
检查
你的意图是使用那个迭代列表,然后知道当提供的项目为空时它已经不会运行可能是好的。如果直接被此检查所包围,则此检查完全是多余的。