在方法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是详细解释此问题的好地方。

而已。
希望这可以帮助。

让我知道您是否对此有任何困惑。

07-24 13:09