2013-06-20 235 views
16

我在我的應用程序中使用了Spring 3和Tiles 2,並且在重定向時遇到了一些問題。 最好,我想能夠從Controller1方法調用或重定向到Controller2方法,但到目前爲止一直不成功。從一個控制器方法重定向到另一個控制器方法

我試圖在pageviews.properties文件中創建一個新條目。這樣我就可以從Controller1中返回這個名稱,它會從xml文件中查找我的瓷磚def名稱。

createRejectionEmail.(parent)=tilesView 
createRejectionEmail.url=createRejectionEmail.page 

redirectRejectionEmail.(class)=org.springframework.web.servlet.view.RedirectView 
rediectRejectionEmail.contextRelative=true 
redirectRejectionEmail.url=createRejectionEmail.page 

但是,當我嘗試返回象下面我的網址顯示包含createRejectionEmail爲URL的一部分 - 而不是使用,這樣做起來的磚DEFS的樣子。 mav.setViewName(「redirectRejectionEmail」); return mav;

<definition name="createRejectionEmail.page" extends="brandedLayout"> 
    <put-attribute name="targetFunction" value="status" /> 
    <put-attribute name="content" value="/WEB INF/jsp/pages/status/createRejectionEmail.jsp" /> 
</definition> 

我目前的配置如下。

<bean id="resourceViewResolver" 
class="org.springframework.web.servlet.view.ResourceBundleViewResolver" 
p:order="0" p:basename="config.spring.viewresolution.pageviews"/> 



<bean id="tilesConfigurer" class="org.springframework.web.servlet.view.tiles2.TilesConfigurer"> 
<property name="definitions"> 
    <list> 
    <value>/WEB-INF/jsp/**/views.xml</value> 
    </list> 
</property> 
</bean> 

任何幫助和指導將不勝感激!

回答

38

從您的控制器中,您可以將返回類型更改爲ModelAndView並返回下面的代碼。這將重新引導請求併爲新URL調用控制器。

return new ModelAndView("redirect:/myURL"); 

或者你可以採取在HttpServletResponse的在你的控制方法,並返回一個重定向。

public void myController(HttpServletResponse response){ 
response.sendRedirect("/myURL"); 
} 
+0

嗨,感謝您的回覆。我嘗試了這一點,我得到以下內容。無法使用名稱'Spring-MVC-for-OA'在名爲'redirect:/myapppath/status/displayEmailRejectionForm.html'的servlet中解析視圖。 SHoudl我正在使用不同的視圖解析器?目前,我們正在使用ResourceBundleViewResolver和tiles2 – Carl

+0

OK!它正在工作!非常感謝你的幫助。我還必須將UrlBasedViewResolver添加到我的應用程序上下文中。我很感激你花時間回覆! – Carl

+0

即使對於@RequestMapping註解方法的字符串返回類型,這似乎也能正常工作。就像Carl的情況一樣,關鍵是添加UrlBasedViewResolver類配置。 – Marin

6
@RequestMapping(value = "/timeout", method = RequestMethod.GET) 
    public ModelAndView loginForm(HttpServletRequest request,HttpServletResponse response) { 


       return new ModelAndView("redirect:/app/timeout"); 

    } 

當此方法處理程序調用然後將其重定向到/應用/超時控制器。

+0

工程就像一個魅力,最好的是,如果你的應用程序有上下文,那麼這種方法解決它,而不需要明確傳遞。 – deFreitas

相關問題