我使用的Liferay和Spring MVC另一個Portlet,我想重定向到另一個Portlet,並將它傳遞參數,但是當我嘗試設置渲染參數我得到這個錯誤:重定向與ActionMapping的
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的方法正在被解決只包含assignement和重定向:
@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";
}
我如何可以傳遞參數給barBaz
方法在另一請問portlet?
如果我用response.setProperty(「路徑」通過它, 「somePath」)其他portlet能夠通過request.getProperty(「path」)接收它嗎? (如果它不是@RequestParam) – Dropout
否您無法做到這一點,實際上portlet可以使用屬性向門戶提供供應商特定的信息。這些對於Portal服務器供應商而言是不同使用會話的簡單方法。 request.getSession()。在會話對象上你可以設置屬性。 session.setAttribute(「portletscopeattribute」,「portletscopevalue」,PortletSession.PORTLET_SCOPE);你也可以使用事件。 –
然後我會使用會話。非常感謝! – Dropout