Map EL清空状态未按预期工作

Map EL清空状态未按预期工作,map,vector,foreach,jstl,Map,Vector,Foreach,Jstl,我有一个jsp,它在验证后接收一个名为errorList的Map。这包含页面上每个属性的错误列表。同样的jsp也用于数据的初始输入,在这种情况下,没有可用的映射 因此我创建了以下表达式: <c:if test="${not empty errorList}"> <div class="warningbox"> <div class="warning"> <c:forEach var="error" item

我有一个jsp,它在验证后接收一个名为errorList的
Map
。这包含页面上每个属性的错误列表。同样的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>

测试:${error.errorMessage}
我期望的事情:
1.第一次填写表单时,错误列表不存在(甚至通过检查request.getAttributeNames()进行验证。因此不应执行if正文。不正确,实际上执行if正文….为什么?
2.当向量为空时,forEach body永远不应该执行。实际上,页面上的结果是“test:”。这简直是奇迹


也许不是一个不重要的事实。我使用谷歌应用程序引擎我看到了三种可能性:

  • errorList
    (实际上应该命名为errorMap)出现在请求属性中,并且不是空的(但您排除了这一点)
  • 有一个名为
    errorList
    的页面、会话或应用程序作用域属性不是空的。您可以使用
    ${not empty requestScope.errorList}
    排除该问题
  • 您在页面上看到“test”,因为EL被忽略,或者因为核心标记库没有在JSP中声明。请检查生成的HTML代码以查看它的外观

  • @JB Nizet。上面的代码不是100%准确。我目前没有可用的代码,只是为了解释我的问题。${errorList['attributeName']}将代码更改为真实代码。解决了!我在核心库的include中有一个输入错误,谢谢!而且很明显,在我的示例中,您无法直接链接到enum PropertyAttribute,因为EL无法直接访问java类。为了克服这一问题,我必须在EL中使用设置一个新的var。使用该新的var作为映射上的键可以工作。但是对我来说他是EL中缺少的东西。它使我的页面更加动态,只有一个地方可以更改表单项名称。