我想低估在Hidden features of JSP/Servlet使用JSTL访问地图时会发生什么 在@ blausC的回答中,他解释了发生了什么,但当我尝试使用以下代码时
<c:set var="resultMap" value="validationResults" scope="request"></c:set>
<c:if test="${resultMap['userName'] != null}">
${resultMap['userName'].details}
</c:if>
发生混乱的异常
Caused by: javax.el.PropertyNotFoundException: Property 'userName' not found on type java.lang.String
地图的关键字应该是字符串,所以whay是这个例外,我试过上面问题中的例子和同样的例外,有人可以告诉我哪里有误解吗?
编辑:我在servlet中填充地图并将其发送到jsp
Map<String, ValidationResult> result = new HashMap<String, ValidationResult>();
aValidationResult = new ValidationResult();
check whether the field is valid or not if not fill the map
result.put("userName", aValidationResult);
result.put("group", aValidationResult);
如果map不为空,则将地图返回给jsp
request.setAttribute("validationResults", result);
当我进行服务器端验证时,地图已填满
提前完成。
答案 0 :(得分:3)
resultMap
是一个字符串
<c:set var="resultMap" value="validationResults" scope="request"></c:set>
您需要使用EL来分配值
<c:set var="resultMap" value="${validationResults}" scope="request"></c:set>
修改:以下是工作代码
<c:set var="validationResults" value="<%= new java.util.HashMap() %>" />
<c:set target="${validationResults}" property="username" value="Hello World" />
<c:set var="resultMap" value="${validationResults}" />
<c:out value="${resultMap['username']}"></c:out>
答案 1 :(得分:1)
这是因为String类没有名为getUserName()
的方法