Java 使用ActionMapping重定向到另一个portlet
我使用的是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方法只包含赋值和重定向: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
@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";
}