我正在尝试在同一个WAR中运行liferay portlet和servlet之间的会话。
我在LoginPostAction(Hook)中设置了这样的属性:
@Override
public void run(HttpServletRequest request, HttpServletResponse response) throws ActionException {
Gebruiker g = new Gebruiker();
request.getSession().setAttribute("gebruiker", gebruiker);
}
尝试通过AJAX请求在我的servlet中获取此Gebruiker对象:
@RequestMapping(value="/haalContactGegevens", method = RequestMethod.POST)
public @ResponseBody ContactGegevensMessage getContactGegevens(HttpServletRequest request, HttpServletResponse response) {
Gebruiker gebruiker = (Gebruiker)request.getSession(true).getAttribute("gebruiker");
}
但是这里我的'Gebruiker-object'保持为空。
我做错了什么?
THX
答案 0 :(得分:2)
简单:LoginPostAction由Liferay处理(即使在您的webapp的上下文/类加载器中已经技术实现。但是,如果您查看httpServletRequest的上下文路径,它是Liferay&#39 ; s。
当您在自己的webapp中实现servlet时,它将拥有自己的会话,与Liferay无关。
您应该实现一个portlet并利用其serveResource
生命周期方法来处理Ajax请求 - 这将使您成为整个门户环境的一部分。但是,您还应该尽量减少Http级别会话的使用:它很快就会成为内存泄漏的来源。
注意:实现portlet时,您可以访问HttpServletRequest(通过PortalUtil),但由于上面给出的原因,不鼓励这样做。但由于我不知道您要尝试实现的目标,因此这将是您在问题中提供的代码的quickfix的一部分。