我在Liferay中遇到了一个可能简单的Spring Portlet重定向和jsp渲染问题。
我有两个页面在Liferay的 第1页 和 第2页 和一个Spring MVC的portlet的 portletA 有两个JSP defaultView.jsp 和 second.jsp 。
page1和page2都实例化portletA。
portletA默认通过调用@RenderMapping()方法加载defaultView.jsp。
DefaultViewController :
@RenderMapping public String renderDefaultView() { return "defaultView"; }
在defaultView.jsp中,可以通过http重定向(@ActionMapping resp.sendRedirect())来调用liferay页面2。
defaultView.jsp :
$(nRow).click(function() { window.location.href = "<portlet:actionURL name='doGotoPage2' />" });
@ActionMapping("doGotoPage2") public void doGoToMedicalAid(ActionRequest req, ActionResponse resp) { try { resp.sendRedirect("/group/project/page2"); } catch (IOException ex) { Logger.getLogger(DefaultViewController.class.getName()).log(Level.SEVERE, null, ex); } }
现在我在想
从page1重定向后,如何告诉portletA在page2上调用不同的@RenderMapping方法 ?
我希望portletA在page2上呈现second.jsp:
@RenderMapping(value = "renderSecondPage") public String renderSecondPage() { return "second"; }
据我了解,我无法在sendRedirect之前或之后的操作阶段设置renderParameters!
例如,这不起作用,并导致 java.lang.IllegalStateException:设置渲染参数已被调用
resp.sendRedirect("/group/project/page2"); resp.setRenderParameter("render", "renderSecondPage");
非常感谢你的帮助!
该Portlet API的文档指出:
在调用了ActionResponse接口的以下任何方法之后,将无法调用sendRedirect方法: setPortletMode setWindowState setRenderParameter setRenderParameters
在调用了ActionResponse接口的以下任何方法之后,将无法调用sendRedirect方法:
您将需要使用另一个作用域来存储属性。