我正在使用 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 需要一个字符串参数“路径”:
@RenderMapping
public String barBaz(RenderRequest request, @RequestParam String path){
// ...
return "some/jsp";
}
请问如何将参数传递给另一个 portlet 中的 barBaz
方法?
最佳答案
你的异常说这个IllegalStateException: Set render parameter has already been called
请注意,此拦截器正在调用 ActionResponse 上的 setRenderParameter,这意味着您无法在使用此拦截器时在处理程序中调用 sendRedirect。如果您需要进行外部重定向,那么您要么需要手动转发映射参数,要么编写一个不同的拦截器来为您处理此问题
关于java - 使用 ActionMapping 重定向到另一个 portlet,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20098567/