if / else jstl中的逻辑

时间:2013-04-01 06:46:08

标签: java jsp jstl el

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

1 个答案:

答案 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检查

会更好

你的意图是使用那个迭代列表,然后知道当提供的项目为空时它已经不会运行可能是好的。如果直接被此检查所包围,则此检查完全是多余的。