编程语言
首页 > 编程语言> > java-使用ActionMapping重定向到另一个portlet

java-使用ActionMapping重定向到另一个portlet

作者:互联网

我正在使用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: Set render parameter has already been called

at com.liferay.portlet.ActionResponseImpl.sendRedirect(ActionResponseImpl.java:48)
at 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方法?

解决方法:

您异常地说,此IllegalStateException:设置渲染参数已被调用

请注意,此拦截器正在ActionResponse上调用setRenderParameter,这意味着使用此拦截器时无法在处理程序中调用sendRedirect.如果您需要进行外部重定向,则需要手动转发映射参数或编写其他拦截器来为您处理

DOC

标签:portlet,response-redirect,spring,java,spring-mvc
来源: https://codeday.me/bug/20191122/2059998.html