一尘不染

Spring Portlet MVC sendRedirect和setRenderParameter

jsp

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

我有两个页面在Liferay的 第1页第2页 和一个Spring MVC的portlet的 portletA 有两个JSP
defaultView.jspsecond.jsp

page1和page2都实例化portletA。

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

DefaultViewController

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

在defaultView.jsp中,可以通过http重定向(@ActionMapping
resp.sendRedirect())来调用liferay页面2。

defaultView.jsp

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

DefaultViewController

@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";
}

据我了解,我无法在sendRedirect之前或之后的操作阶段设置renderParameters!

例如,这不起作用,并导致 java.lang.IllegalStateException:设置渲染参数已被调用

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

非常感谢你的帮助!


阅读 346

收藏
2020-06-10

共1个答案

一尘不染

Portlet API的文档指出:

在调用了ActionResponse接口的以下任何方法之后,将无法调用sendRedirect方法:

  • setPortletMode
  • setWindowState
  • setRenderParameter
  • setRenderParameters

您将需要使用另一个作用域来存储属性。

2020-06-10