我正在尝试确保对象列表不为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标签
最佳答案
您是否已正确包含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
检查会更好您的意图是使用遍历该列表,那么最好在提供的项目为空时知道它不会运行。如果此检查直接包围了,则此检查完全多余。
关于java - jSTL中的if/else逻辑,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/15738900/