使用ActionMapping重定向到另一个portlet

时间:2013-11-20 14:27:58

标签: java spring spring-mvc portlet response.redirect

我正在使用Liferay和Spring MVC,我想重定向到另一个portlet并传递一个参数,但是当我尝试设置渲染参数时,我得到了这个错误:

  

15:20:24,859 ERROR [portal-web.docroot.html.portal.render_portlet_jsp](http-foo-10.23.243.3-8080-7) java.lang.IllegalStateException:设置渲染参数已经过称为

     

at com.liferay.portlet.ActionResponseImpl.sendRedirect(ActionResponseImpl.java:48)   在sk.foo.showcasePortlet.ShowcaseController.redirect(ShowcaseController.java:65)

正在解析的showcaseController方法只包含了分配和重定向:

@ActionMapping(params = { "action=redirect" })
public void redirect(ActionRequest request, ActionResponse response) 
    throws IOException {

    response.setRenderParameter("path", request.getParameter("path"));
    response.sendRedirect("/path/to/portlet");
}

为什么我不能分配该参数?当我删除该行时,重定向工作,但问题是用户被重定向到的portlet需要一个字符串参数“path”:

@RenderMapping
public String barBaz(RenderRequest request, @RequestParam String path){
    // ...
    return "some/jsp";
}

如何将参数传递给另一个portlet中的barBaz方法?

1 个答案:

答案 0 :(得分:3)

你的例外说明 IllegalStateException:已经调用了set render参数

请注意,此拦截器正在ActionResponse上调用setRenderParameter,这意味着在使用此拦截器时无法在处理程序中调用sendRedirect。如果你需要进行外部重定向,那么你需要手动转发映射参数或者编写一个不同的拦截器来为你处理这个

DOC