如何在Liferay portlet的渲染阶段获取ActionRequest和ActionResponse?

时间:2015-04-15 13:45:35

标签: liferay

如何在Liferay portlet的Render Phase中获取ActionRequest和ActionResponse?我试图将ActionRequest和ActionResponse参数添加到我的方法中:

@RenderMapping()
public String renderForm(@ModelAttribute MyForm form, BindingResult result, ActionRequest request, ActionResponse response)

但这些参数导致例外:

Current request is not of type [javax.portlet.ActionRequest]

感谢。

2 个答案:

答案 0 :(得分:1)

ActionRequest和ActionResponse与portlet执行的操作阶段相关联,在呈现阶段无法访问。在呈现阶段,只能访问RenderRequest和RenderResponse。在渲染阶段没有动作请求。

如果要从操作阶段访问参数,请使用渲染参数或portlet间通信方式。

通常的做法是在行动阶段设置渲染参数:

actionResponse.setRenderParameter("myParameter", "alligator");

在渲染阶段,您可以从渲染请求中读取它:

renderRequest.getParameter("alligator");

有关portlet间通信的方法,请参阅https://www.liferay.com/community/wiki/-/wiki/Main/Portlet+to+Portlet+Communication

答案 1 :(得分:1)

我想对请求做一些解释。

的PortletRequest /的ActionRequest / RenderRequest中

的PortletRequest

PortletRequest是两者的父级。 ActionRequest和RenderRequest都是不同类型的PortletRequest对象。

的ActionRequest

ActionRequest在portlet的操作处理阶段有效。在这个阶段,portlet还没有完全决定如何自我渲染,最小化,最大化,编辑模式或视角模式等。

的RenderRequest

另一方面,RenderRequest在portlet的呈现阶段有效。此时,portlet知道它将如何呈现自身,并且不允许某些更改(例如窗口状态)。

因此,所有请求/响应具有不同的意义。

在您的情况下,您可以使用 getParameter 在渲染阶段检索参数,但需要使用 setRenderParameter 在操作阶段设置值。

注意: Portlet规范(JSR 286(Portlet 2.0))

JSR 286的主要特点是:

  • 通过事件和公共呈现参数进行Portlet间通信
  • 直接通过portlet提供动态生成的资源

感谢。