Liferay:如何从doEdit的portlet添加cookie(RenderRequest-req,RenderResponse-res)

Liferay:如何从doEdit的portlet添加cookie(RenderRequest-req,RenderResponse-res),liferay,liferay-6,liferay-velocity,Liferay,Liferay 6,Liferay Velocity,我正在尝试从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

我正在尝试从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);
}
这里我得到了一个错误,比如:对于RenderResponse类型,addCookie(Cookie)方法没有定义


那么,有人能帮我通过addProperty(.)进行设置吗


正在尝试通过addProperty()进行设置

注意:对于Cookie,用户有这样的说法:

PLT.12.1.4设置Cookies

portlet可以通过
addProperty
方法,并将
javax.servlet.http.Cookie
作为参数。门户 应用程序无需将cookie传输到客户端。因此 portlet不应假定它可以访问服务器上的cookie 客户端或该请求触发的URL不是由 portlet API可以访问cookie

在一个生命周期调用的响应中设置的Cookies应该可用 在随后的生命周期调用中调用portlet,例如设置
processAction
中的cookie应使portlet能够检索 在下一次
render
调用中使用cookie

对于通过portlet URL触发的请求,portlet应接收 把饼干放回去。可以通过
请求检索Cookies。获取Cookies
方法

Cookie是上述关于Cookie的属性和所有限制 属性也适用于Cookie,即成功传输 回到客户端,必须在响应完成之前设置cookies 坚信的响应后在
render
serversource
中设置的cookie portlet容器将忽略提交的

在渲染生命周期阶段设置cookie时,应设置Portlet 渲染头中的Cookie将部分或简单地覆盖
GenericPortlet.doHeaders
方法,以便以最大速度运行 所有门户实施的性能(见PLT.11.1.1.4.3)

因此,如果您确实依赖浏览器中可用的HTTP Cookie:您不能假设它在那里,因为它只是门户内部的“属性”,模拟Cookie的行为

如果您需要HTTP/Browser上可用的Cookie,则必须依赖门户实现(检查它)或通过Javascript进行设置,或者找到不同的解决方案。如果您只需要数据可用,请使用
addProperty
,正如Ankit P在另一个答案中提到的那样。但是(由于规范的原因)我怀疑您是否需要为它获取
HttpServletRequest
:cookie应该已经在
PortletRequest
(发起请求的portlet的)上可用。

注意:关于cookie:

PLT.12.1.4设置Cookies

portlet可以通过
addProperty
方法,并将
javax.servlet.http.Cookie
作为参数。门户 应用程序无需将cookie传输到客户端。因此 portlet不应假定它可以访问服务器上的cookie 客户端或该请求触发的URL不是由 portlet API可以访问cookie

在一个生命周期调用的响应中设置的Cookies应该可用 在随后的生命周期调用中调用portlet,例如设置
processAction
中的cookie应使portlet能够检索 在下一次
render
调用中使用cookie

对于通过portlet URL触发的请求,portlet应接收 把饼干放回去。可以通过
请求检索Cookies。获取Cookies
方法

Cookie是上述关于Cookie的属性和所有限制 属性也适用于Cookie,即成功传输 回到客户端,必须在响应完成之前设置cookies 坚信的响应后在
render
serversource
中设置的cookie portlet容器将忽略提交的

在渲染生命周期阶段设置cookie时,应设置Portlet 渲染头中的Cookie将部分或简单地覆盖
GenericPortlet.doHeaders
方法,以便以最大速度运行 所有门户实施的性能(见PLT.11.1.1.4.3)

因此,如果您确实依赖浏览器中可用的HTTP Cookie:您不能假设它在那里,因为它只是门户内部的“属性”,模拟Cookie的行为


如果您需要HTTP/Browser上可用的Cookie,则必须依赖门户实现(检查它)或通过Javascript进行设置,或者找到不同的解决方案。如果您只需要数据可用,请使用
addProperty
,正如Ankit P在另一个答案中提到的那样。但是(由于规范原因)我怀疑您是否需要为它获取
HttpServletRequest
:cookie应该已经在
PortletRequest
(发起请求的portlet)上可用。

尝试使用下面的代码创建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)方法。请尝试使用以下代码创建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)方法,该方法工作正常。

以下是如何在客户端上设置cookie的示例:以下是如何在客户端上设置cookie的示例: