EL空状态未按预期工作

时间:2012-07-11 07:35:09

标签: map vector foreach jstl

我有一个jsp,它接收(在验证之后)一个名为errorList的Map<String, Vector<ErrorMessage>>。这包含页面上每个属性的错误列表。同样的jsp也用于数据的初始输入,在这种情况下,没有地图可用。

因此我创建了以下表达式:

<c:if test="${not empty errorList}">
    <div class="warningbox">
        <div class="warning">
            <c:forEach var="error" items="${errorList['PropertyAttribute.KIND']}"/>
                test: ${error.errorMessage}
            </c:forEach>
        </div>
    </div>
</c:if>

我期待的事情:
1.第一次填写表单时,errorList不存在(甚至通过检查request.getAttributeNames()验证。因此if主体不应该执行。不是,实际上if主体被执行....的为什么
2.当Vector为空时,永远不应执行forEach主体。实际上,页面上的结果是“test:”。这太荒谬了。

也许不是一个不重要的事实。我使用谷歌应用引擎

1 个答案:

答案 0 :(得分:1)

我看到三种可能性:

  1. errorList(确实应该命名为errorMap)存在于请求属性中,而不是空的(但你已经将其排除在外)
  2. 有一个名为errorList的页面,会话或应用程序范围属性,它不为空。您可以使用${not empty requestScope.errorList}
  3. 来排除这种情况
  4. 你看&#34;测试&#34;在页面上,因为EL被忽略或者因为JSP中没有声明核心标记库。检查生成的HTML代码以查看其外观。