我是cq5的新手,请帮助!! 我试图在session属性中设置hashmap。但由于某种原因,我得到JSP无法编译。 请帮忙!!
<%@include file="/apps/test/test2/global.jsp"%>
<%@page session="false"
import="org.apache.sling.api.resource.ValueMap,
com.day.cq.wcm.api.WCMMode,
com.day.cq.dam.scene7.api.net.NetUtils,
org.apache.commons.lang.StringUtils,
javax.jcr.Session,
org.apache.jackrabbit.api.security.user.UserManager,
org.apache.jackrabbit.api.security.user.Authorizable" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%
Session session = resourceResolver.adaptTo(Session.class);
Map<String, String> sessionValues = new HashMap<String, String>();
for(int i=0;i<5;i++)
{
sessionValues.put("Id"+i, properties.get("test:Id"+i, ""));
sessionValues.put("Url"+i,properties.get("test:Url"+i,""));
}
// put the hashmap as session
session.setAttribute("map", sessionValues);
%>
答案 0 :(得分:5)
您拥有的Session是一个存储库会话,它与HTTP Session非常不同。 Javax.jcr.Session是您访问内容存储库的门户。它不用于存储与会话相关的属性,也没有任何setAttribute方法。它用于读取和写入存储库(http://jackrabbit.apache.org/jcr/how-jackrabbit-works.html)。如果您要查找的只是一个http会话,那么您应该从slingRequest获取它。
但是,如果您使用http会话,则无法在调度程序中缓存页面(https://forums.adobe.com/thread/960708)
答案 1 :(得分:1)
如前所述,您使用的是错误的会话。除此之外,它们是不同的用例,它取决于你想要实现的目标。如果您在请求有效期内尝试在不同组件之间共享属性,则可以set a servlet request attribute:
request.setAttribute(name, value)
请求完成后,将重置此属性。 如果要在用户会话中保留数据,则可以使用请求中提供的http会话对象:
request.getSession().setAttribute(name, value)