概念

2010-12-17 223 views
0

我想understrand當我使用JSTL訪問地圖會發生什麼,在Hidden features of JSP/Servlet 在@ blausC的回答,他解釋發生了什麼,但是當我嘗試使用下面的代碼概念

 <c:set var="resultMap" value="validationResults" scope="request"></c:set> 
    <c:if test="${resultMap['userName'] != null}"> 
      ${resultMap['userName'].details} 
    </c:if> 

一困惑例外happend

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); 

如果地圖不爲空,則返回地圖把jsp

request.setAttribute("validationResults", result); 

地圖充滿時我做服務器端驗證,

Thanx提前。

回答

1

這是因爲String類沒有一個名爲getUserName方法引起的()

+0

我懷疑這會是原因,但我該怎麼處理map,因爲它的鍵是字符串? – palAlaa 2010-12-17 04:04:01

+0

你如何填充resultMap? – Enrique 2010-12-17 04:05:22

+0

如果resultMap是java.util.Map或java.lang.String,您是否調試過? – gbakernet 2010-12-17 04:08:09

3

resultMap是因爲該行

<c:set var="resultMap" value="validationResults" scope="request"></c:set> 

您需要使用EL指定值

的String
<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> 
+0

,所以在我將值設置爲「$ {validationResults}」時它不起作用,它的工作原理是@Enriquw回答,但我不明白爲什麼? – palAlaa 2010-12-17 04:31:01