关于JSTL的概念

时间:2010-12-17 03:54:43

标签: java jsp jstl el

我想低估在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);

当我进行服务器端验证时,地图已填满

提前完成。

2 个答案:

答案 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()

的方法