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