在方法processAction(ActionRequest request, ActionResponse response)
中,我将一条记录插入数据库并获取ID
,然后
我想重定向到该记录的查看页面。因此,我需要使用该ID的参数值创建一个RenderURL
。ActionResponse
不提供创建renderURL
的方法。 Liferay中的某些代码执行类似的操作:
在访问renderURL
之前创建actionURL
将renderURL
作为参数传递给actionURL
但是,那时我不知道ID
的值。
其他代码也直接使用new PortletURLImpl()
。我的Portlet无法看到该类。
最佳答案
其他代码也直接使用新的PortletURLImpl()。我的Portlet无法看到该类。
由于此类位于portal-impl.jar
中,因此也不建议使用此jar中的类。从Liferay 6.1开始,如果类指向portal-impl.jar
,则将无法从plugins-sdk构建portlet。
现在回答您的问题:
任何jsp都是通过render
方法或doView
方法(如果使用liferay的MVCPortlet
)呈现的,并且此方法将被称为portlet正常生命周期的一部分。
这是您需要采取的步骤:
最后在您的`processAction'方法中设置一个渲染参数(使用response.setRenderParameter()方法),该参数将在您的render方法中可用,如下所示:
actionResponse.setRenderParameter("myID", 1201);
仅供参考:使用
setRenderParameter
后,不能使用sendRedirect
方法在获取其他任何请求参数时,在渲染方法中获取此
"myID"
://assuming your ID is a long
long myUserName = ParamUtil.getLong(renderRequest, "myID");
要么
String strMyID = renderRequest.getParameter("myID");
long myID = Long.parseLong(strMyID);
在此之后,只需使用
include(renderPage, renderRequest, renderResponse);
renderPage
只是一个字符串,其中包含docroot
中的jsp路径,例如/html/yourportlet/view.jsp
正如事后的想法:
如果使用Liferay IDE,则可以尝试使用
MVCPortlet
创建一个简单的portlet项目,然后查看生成的portlet.xml
的<init-param>
因此,基本上,您需要将信息从操作阶段传递到渲染阶段,development guide是详细解释此问题的好地方。
而已。
希望这可以帮助。
让我知道您是否对此有任何困惑。