我正在尝试从portlet doEdit方法设置一个cookie,如下所示:
Public void doEdit(RenderRequest request, RenderResponse response)
throws PortletException, IOException
{
Cookie cookie = new Cookie("url","mkyong dot com");
cookie.setMaxAge(60*60); //1 hour
res.addCookie(cookie);
}
这里我收到的错误如下:方法addCookie(Cookie)未定义类型RenderResponse
任何人都可以帮助我
答案 0 :(得分:4)
注意:Portlet spec有关于Cookie的说法:
PLT.12.1.4设置Cookies
portlet可以通过
addProperty
在响应中设置HTTP cookie 以javax.servlet.http.Cookie
为参数的方法。门户网站 申请不需要将cookie转移到客户端。从而 portlet不应该假设它可以访问cookie上的cookie 客户端或该请求是由未生成的URL触发的 portlet API可以访问cookie。应该可以使用在一个生命周期调用的响应中设置的Cookie 在后续生命周期调用中的portlet,例如,设置一个
processAction
中的cookie应该使portlet能够检索 下一次render
电话中的Cookie。对于通过portlet URL触发的请求,portlet应该接收 支持cookie。可以通过
request.getCookies
检索Cookie 方法Cookie是属性和上述所有限制 属性也适用于cookie,即成功传输 回到客户端,必须在响应之前设置cookie 承诺。响应后,Cookie设置为
render
或serveResource
提交将被portlet容器忽略。在渲染生命周期阶段设置cookie时,应设置portlet 渲染标题中的cookie部分或简单地覆盖
GenericPortlet.doHeaders
方法以便以最大值运行 所有门户实现的性能(见PLT.11.1.1.4.3)。
因此,如果你真的依赖于浏览器中的HTTP Cookie:你不能认为它存在,因为它只是一个门户内部的“属性”,模拟了cookie的行为。
如果你需要一个可在HTTP /浏览器上使用的Cookie,你必须依赖门户网站实现(检查它)或通过Javascript设置它,或者找到一个不同的解决方案。如果您只需要数据可用,请使用addProperty
,就像Ankit P在另一个答案中提到的那样。我怀疑(由于规范)你需要为它获取HttpServletRequest
:cookie应该在PortletRequest
(发起请求的portlet)上可用。
答案 1 :(得分:0)
尝试通过addProperty(。)
进行设置import com.liferay.util.CookieUtil;
Cookie cookie = new Cookie("url","mkyong dot com");
cookie.setMaxAge(60*60);
renderResponse.addProperty(cookie);
To read cookie from request:
HttpServletRequest request = PortalUtil.getHttpServletRequest(
portletRequest);
url = CookieUtil.get(request, "url");
答案 2 :(得分:0)
尝试使用以下代码创建Cookie
Cookie paramCookie = new Cookie("Key", "Vishal Shah");
paramCookie.setVersion(0);
paramCookie.setMaxAge(4 * 24 * 60 * 60); //4 days
renderResponse.addProperty(paramCookie);
根据您的代码,您会错过版本设置行。
我在porcessAction中使用上面的代码行(ActionRequest actionRequest, ActionResponse actionResponse)方法正常工作。