我正在尝试确保对象列表不为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/

10-09 15:16