понятия о JSTL - PullRequest
       18

понятия о JSTL

0 голосов
/ 17 декабря 2010

Я хочу понять, что происходит, когда я использую JSTL для доступа к картам, в Скрытые функции JSP / Servlet в ответе @ 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

Ключ карты должен быть строковым, поэтому, если это исключение, я попробовал примеры из приведенного выше вопроса и то же исключение. Может кто-нибудь сказать мне, где у меня возникло недопонимание?

Редактировать : Я заполняю карту в сервлете и отправляю ее на 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);

карта заполняется, когда я выполняю проверку на стороне сервера,

Спасибо заранее.

Ответы [ 2 ]

3 голосов
/ 17 декабря 2010

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 голос
/ 17 декабря 2010

Это вызвано тем, что класс String не имеет метода с именем getUserName ()

...