我有一个存储在会话中的hashmap。 hashMap是地图的地图。
HashMapStoredInSession ={"290" = {text="abc", response="someText"}, "276"={text="xyz", response="random"}};
我不想使用scriptlet。但我坚持使用一个scriptlet,似乎无法使其工作。我出错的任何建议都会很棒。 SCRIPTLET + JSTL的以下组合工作
Scriptlet中:
<%
Map hMap= (Map)request.getSession().getAttribute("HashMapStoredInSession");
pageContext.setAttribute("mapofMaps", hMap);
%>
JSTL代码:
<c:if test="${param.ID != 'null' && not empty param.ID}">
<c:set var="someID" value="${param.ID}" scope="session"/>
</c:if>
<c:forEach items="${mapofMaps}" var="outerMap">
<c:if test="${outerMap.key == someID}"> // this is the line where exception is thrown when the above scriptlet code is replaced with JSTL below
<c:forEach items="${outerMap.value}" var="innerMap">
<c:if test="${innerMap.key == 'param1'}">
<c:set var="response1" value="${innerMap.value}"/>
</c:if>
<c:if test="${innerMap.key == 'param2'}">
<c:set var="response2" value="${innerMap.value}"/>
</c:if>
</c:forEach>
</c:if>
</c:forEach>
现在,如果我尝试用以下内容替换scriptlet代码(不更改JSTL代码)
<c:set var="mapofMaps" value ='<c:out value ="<%=request.getSession().getAttribute("HashMapStoredInSession")%>"/>'/>
我收到以下错误
An error occurred while evaluating custom action attribute "test" with value "${outerMap.key == someID}":
Unable to find a value for "key" in object of class "java.lang.String" using operator "." (null)
答案 0 :(得分:3)
您可以按${HashMapStoredInSession}
引用它。
<c:forEach items="${HashMapStoredInSession}" var="outerMap">
或者,如果您确实要重命名属性名称,请执行以下操作:
<c:set var="mapofMaps" value="${HashMapStoredInSession}" />
关键是EL ${}
已经在页面,请求,会话和应用程序范围中查找属性。因此,您无需通过 scriptlet 明确使用session.getAttribute()
。