4

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

ActionResponse不提供创建renderURL. Liferay 中的一些代码会做类似的事情,例如:

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

但是,当时我并不知道ID.

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

4

4 回答 4

2

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

因为这个类在portal-impl.jar并且不建议使用这个 jar 中的类。从 Liferay 6.1 开始,如果您的类指向portal-impl.jar.

现在回答你的问题:

render任何 jsp 都由方法或doView方法(如果使用 liferay's )呈现,MVCPortlet并且该方法将作为 portlet 正常生命周期的一部分被调用。

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

  1. 最后在您的 `processAction' 方法中设置渲染参数(使用response.setRenderParameter()方法),这将在您的渲染方法中可用,如下所示:

    actionResponse.setRenderParameter("myID", 1201);
    

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

  2. 在您获取"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);
    

    wererenderPage只不过是一个字符串,其中包含您的 jsp 的docroot路径/html/yourportlet/view.jsp

    事后才想到:
    如果您使用的是 Liferay IDE,那么您可以尝试创建一个简单的 portlet 项目,MVCPortlet然后查看生成portlet.xml<init-param>

所以基本上你需要将信息从动作阶段传递到渲染阶段,开发指南是详细解释这一点的好地方。

而已。
希望这可以帮助。

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

于 2012-11-01T06:25:06.180 回答
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()));

当然,您可以根据需要添加或复制参数。

于 2012-12-05T22:53:27.980 回答
0

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

于 2012-11-01T05:15:37.143 回答
-1

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

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

processAction

    String redirect = redirectParam.replace("__ID__", "123213");
    actionResponse.sendRedirect(redirect) ;
于 2012-11-02T09:55:10.123 回答