如何在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]
感谢。
答案 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对象。
ActionRequest在portlet的操作处理阶段有效。在这个阶段,portlet还没有完全决定如何自我渲染,最小化,最大化,编辑模式或视角模式等。
另一方面,RenderRequest在portlet的呈现阶段有效。此时,portlet知道它将如何呈现自身,并且不允许某些更改(例如窗口状态)。
因此,所有请求/响应具有不同的意义。
在您的情况下,您可以使用 getParameter 在渲染阶段检索参数,但需要使用 setRenderParameter 在操作阶段设置值。
注意: Portlet规范(JSR 286(Portlet 2.0))
JSR 286的主要特点是:
感谢。