如何在portlet的操作阶段创建RenderURL?

时间:2012-11-01 02:17:13

标签: liferay portlet liferay-6

在方法processAction(ActionRequest request, ActionResponse response)中,我将记录插入数据库并获取ID然后 我想重定向到此记录的视图页面。所以我需要创建一个RenderURL,其中包含该ID的参数值。

ActionResponse未提供创建renderURL的方法。 Liferay中的一些代码执行类似的操作:

  1. 在访问renderURL
  2. 之前创建actionURL
  3. renderURL作为actionURL
  4. 中的参数传递

    但是,当时我不知道ID的价值。

    其他代码也直接使用new PortletURLImpl()。我的portlet看不到那个类。

4 个答案:

答案 0 :(得分:2)

  

其他代码也直接使用新的PortletURLImpl()。我的portlet看不到那个类。

因为此类在portal-impl.jar中,所以不建议使用此jar中的类。从Liferay 6.1开始,如果类指向portal-impl.jar,您将无法从plugins-sdk构建portlet。

现在回答你的问题:

任何jsp都是通过render方法或doView方法呈现的(如果使用liferay的MVCPortlet),则此方法将作为portlet正常生命周期的一部分进行调用。 / p>

以下是您需要采取的步骤:

  1. 在你的`processAction'方法中设置一个render参数(使用response.setRenderParameter()方法),该方法可以在你的render方法中使用,如下所示:

    actionResponse.setRenderParameter("myID", 1201);
    

    仅供参考:使用setRenderParameter后,您无法使用sendRedirect方法

  2. 在获取任何其他请求参数时,在您的render方法中获取此"myID"

    //assuming your ID is a long
    long myUserName = ParamUtil.getLong(renderRequest, "myID");
    

    String strMyID = renderRequest.getParameter("myID");
    long myID = Long.parseLong(strMyID);
    
  3. 在此之后,只需使用

    include(renderPage, renderRequest, renderResponse);
    

    renderPage只是一个字符串,其中包含docroot {j}中jsp的路径,如/html/yourportlet/view.jsp

    正如事后的想法:
    如果您使用的是Liferay IDE,那么您可以尝试使用MVCPortlet创建一个简单的portlet项目,然后查看生成的portlet.xml的{​​{1}}

    < / LI>

    所以基本上你需要将信息从动作阶段传递到渲染阶段,development guide是一个很好地解释这一点的好地方。

    就是这样。
    希望这会有所帮助。

    如果您对此有任何疑惑,请告诉我。

答案 1 :(得分:2)

在行动阶段,请执行以下操作:

ThemeDisplay themeDisplay = (ThemeDisplay)request.getAttribute (WebKeys.THEME_DISPLAY);
PortletURL url = PortletURLFactoryUtil.create(request, this.getPortletName(), themeDisplay.getPlid(), PortletRequest.RENDER_PHASE);

例如,如果要重定向到登录页面并返回,则可以执行以下操作:

response.sendRedirect("/c/portal/login?redirect=" + HttpUtil.encodeURL(url.toString()));

您肯定可以根据需要添加或复制参数。

答案 2 :(得分:0)

您可以包含视图页面include(viewTemplate,actionRequest,actionResponse),而不是创建renderURL。或者如果你想在doView中发送任何想要的任何参数,那么使用actionResponse.setParameter(name,value)方法

答案 3 :(得分:-1)

我使用占位符作为参数值创建RenderURL,如下所示:

   <portlet:renderURL var="redirect">
      <portlet:param name="ID" value="__ID__" />
   </portlet:renderURL>`

processAction

    String redirect = redirectParam.replace("__ID__", "123213");
    actionResponse.sendRedirect(redirect) ;