2013-11-20 66 views
3

我使用的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?

回答

3

您例外說,這IllegalStateException異常:設置渲染參數已經被稱爲

要知道,這個攔截呼籲ActionResponse的,這意味着使用這個攔截器,當你無法調用sendRedirect在你的處理器的setRenderParameter。如果你需要做外部重定向那麼你要麼需要手動轉發映射參數或寫一個攔截器來處理這對你

DOC

+0

如果我用response.setProperty(「路徑」通過它, 「somePath」)其他portlet能夠通過request.getProperty(「path」)接收它嗎? (如果它不是@RequestParam) – Dropout

+0

否您無法做到這一點,實際上portlet可以使用屬性向門戶提供供應商特定的信息。這些對於Portal服務器供應商而言是不同使用會話的簡單方法。 request.getSession()。在會話對象上你可以設置屬性。 session.setAttribute(「portletscopeattribute」,「portletscopevalue」,PortletSession.PORTLET_SCOPE);你也可以使用事件。 –

+0

然後我會使用會話。非常感謝! – Dropout