0

我在 Liferay 中遇到了一个可能很简单的 Spring Portlet 重定向和 jsp 渲染问题。

我在 Liferay page1page2中有两个页面和一个带有两个 JSP defaultView.jspsecond.jsp的spring mvc portlet portletA

page1 和 page2 都实例化了 portletA。

默认情况下,portletA 通过调用@RenderMapping() 方法加载defaultView.jsp。

默认视图控制器

@RenderMapping
public String renderDefaultView() {
    return "defaultView";
}

从 defaultView.jsp 可以通过 http 重定向调用 liferay page2 (@ActionMapping resp.sendRedirect())

默认视图.jsp

 $(nRow).click(function() {
      window.location.href = "<portlet:actionURL name='doGotoPage2' />"
 });

默认视图控制器

@ActionMapping("doGotoPage2")
public void doGoToMedicalAid(ActionRequest req,
        ActionResponse resp) {

    try {
        resp.sendRedirect("/group/project/page2");
    } catch (IOException ex) {
        Logger.getLogger(DefaultViewController.class.getName()).log(Level.SEVERE, null, ex);
    }
}

现在我想知道

从 page1 重定向后,如何告诉 portletA 在 page2 上调用不同的 @RenderMapping 方法

我希望 portletA 在 page2 上呈现 second.jsp:

@RenderMapping(value = "renderSecondPage")
public String renderSecondPage() {
    return "second";
}

据我了解,我无法在发送重定向之前或之后的动作阶段设置渲染参数!

例如,这不起作用并导致java.lang.IllegalStateException: Set render parameter has been called

 resp.sendRedirect("/group/project/page2");
 resp.setRenderParameter("render", "renderSecondPage");

非常感谢你的帮助!

4

3 回答 3

1

The Portlet API docs state that:

The sendRedirect method can not be invoked after any of the following methods of the ActionResponse interface has been called:

  • setPortletMode
  • setWindowState
  • setRenderParameter
  • setRenderParameters

You'll need to use another scope for storing the attribute.

于 2014-06-11T11:31:16.467 回答
1

您需要在第二页上准备 portlet 的 url。在 liferay 中,可以通过创建放置在其他 liferay 页面上的 portlet 的 Render URL 来实现。

PortletURL renderUrl =  PortletURLFactoryUtil.create(request, <<Portlet Id on aonther page>>, <<LayoutId of another page>>,PortletRequest.RENDER_PHASE);
renderUrl.setWindowState(LiferayWindowState.NORMAL);
renderUrl.setPortletMode(LiferayPortletMode.VIEW);
renderUrl.setParameter("action", "<<name of action attribute set for render method>>");

解释:-

  • PortletURLFactoryUtil 用于创建portlet URL。我们必须传递请求(portletRequest)、放置在另一个页面上的 portletId、另一个页面的布局 Id 和阶段(当前渲染,因为我们要调用它的渲染方法)。

在 spring MVC portlet 中,您可以有多个渲染方法。默认渲染方法没有任何动作属性,而其他所有方法都有。

于 2015-01-20T11:12:01.427 回答
1

http://www.opensource-techblog.com/2012/12/multiple-render-method-in-liferay-mvc.html

看看上面的链接。这里根据动作方法呈现不同的jsp。

于 2014-06-11T12:03:43.433 回答