Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/311.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用ActionMapping重定向到另一个portlet_Java_Spring_Spring Mvc_Portlet_Response.redirect - Fatal编程技术网

Java 使用ActionMapping重定向到另一个portlet

Java 使用ActionMapping重定向到另一个portlet,java,spring,spring-mvc,portlet,response.redirect,Java,Spring,Spring Mvc,Portlet,Response.redirect,我使用的是Liferay和Spring MVC,我想重定向到另一个portlet并向其传递一个参数,但当我尝试设置渲染参数时,出现以下错误: 15:20:24859错误[portal web.docroot.html.portal.render_portlet_jsp](http-foo-10.23.243.3-8080-7)java.lang.IllegalStateException:已调用Set呈现参数 位于com.liferay.portlet.ActionResponseImpl.se

我使用的是Liferay和Spring MVC,我想重定向到另一个portlet并向其传递一个参数,但当我尝试设置渲染参数时,出现以下错误:

15:20:24859错误[portal web.docroot.html.portal.render_portlet_jsp](http-foo-10.23.243.3-8080-7)java.lang.IllegalStateException:已调用Set呈现参数

位于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”:


我怎样才能将参数传递给另一个portlet中的
barBaz
方法呢?

您的异常说明此IllegalStateException:Set render参数已被调用

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


如果我通过response.setProperty(“path”、“somePath”)传递它,那么另一个portlet是否能够通过request.getProperty(“path”)接收它?(如果它不是@RequestParam)不,您不能很好地做到这一点,实际上portlet可以使用属性向门户提供特定于供应商的信息。这些因门户服务器供应商而异。使用会话的简单方法。request.getSession()。在会话对象上,可以设置属性。setAttribute(“portletscopeattribute”、“portletscopevalue”、PortletSession.PORTLET\u范围);你也可以使用事件。然后我将使用会话。谢谢!
@RenderMapping
public String barBaz(RenderRequest request, @RequestParam String path){
    // ...
    return "some/jsp";
}