0

我有一个jsp,它接收(验证后)一个Map<String, Vector<ErrorMessage>>称为errorList。这包含页面上的每个属性的错误列表。相同的 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:”。这简直是荒谬的。

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

4

1 回答 1

1

我看到了三种可能性:

  1. errorList实际上应该命名为errorMap)存在于请求属性中,而不是空的(但你排除了)
  2. 有一个名为的页面、会话或应用程序范围属性errorList不为空。您可以使用${not empty requestScope.errorList}.
  3. 您在页面上看到“test”是因为 EL 被忽略或者因为核心标记库未在您的 JSP 中声明。检查生成的 HTML 代码以查看其外观。
于 2012-07-11T11:03:19.237 回答