2012-09-11 116 views
2

在我的控制,我使用與Spring MVC重定向3.1.2

return new ModelAndView("redirect:new_page"); 

現在我改變了Spring版本3.0.6,從3.1.2和我發現,它不是在新版本中工作。

我的控制器就像是

@Controller 
@RequestMapping(value = "/test") 
public class MyController { 

定義我試圖用

  • "redirect:/new_page"
  • "redirect:/test/new_page"
  • "redirect:./new_page"

沒有什麼幫助,有什麼想法?

+0

你是什麼意思「它不工作」?它是否發送狀態碼404,403,500或可能返回垃圾? – Xaerxess

+0

日誌/控制檯中沒有錯誤。流程簡單地返回/停留在同一頁面上。我會添加一些信息,以問題... – Betlista

+0

你可以顯示整個控制器代碼? – Xaerxess

回答

1

所以你不得不使用Object作爲返回類型,其中,accoring to Spring MVC reference manual,則不會分派作爲視圖名稱或ModelAndView問題:

  • 任何其他的返回類型被認爲是一個單一的模型屬性到 可以在方法級別使用通過 @ModelAttribute指定的屬性名稱(或基於返回類型類名稱的默認屬性名稱 )暴露給視圖。該模型通過命令對象隱含地豐富了 並且@ModelAttribute的結果被註釋爲 參考數據訪問器方法。

我猜你使用Spring MVC的,這在實施新版本改變了一些無證/內部部件。

+0

我期望在運行時檢查返回類型,這就是所有... – Betlista

0

我發現,在Spring 3.0.6控制器這樣一個是確定:

@Controller 
@RequestMapping(value = "/dialog") 
public class DialogController { 

    @RequestMapping(value = "/redirected.view") 
    public ModelAndView redirected() { 
     System.out.println("DialogController.redirected()"); 
     final ModelAndView mav = new ModelAndView("redirected"); 
     return mav; 
    } 

    @RequestMapping(value = "/form.view") 
    public Object form() { 
     System.out.println("DialogController.form()"); 
     return createModel(); 
    } 

    private ModelAndView createModel() { 
     final ModelAndView mav = new ModelAndView("redirect:redirected.view"); 
     return mav; 
    } 

} 

通知Object返回類型爲form() ...

當我改變Spring版本3.1.2它是返回404 - 它找不到 WEB-INF/jsp/dialog/form.jsp,這很奇怪。

是的,我使用的ViewResolver

原代碼
<bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver"> 
    <property name="viewClass" value="org.springframework.web.servlet.view.JstlView" /> 
    <property name="prefix" value="/WEB-INF/jsp/" /> 
    <property name="suffix" value=".jsp" /> 
</bean> 

方法是又比較複雜

@RequestMapping(value = "/search.form", method = RequestMethod.POST) 
public Object submit(@Valid @ModelAttribute("sequentialSearch") final SequentialSearchData searchObject, 
     final BindingResult bindingResult, final Model model, final HttpSession session) throws Exception { 
    ... 
} 

,也許這就是爲什麼沒有顯示錯誤的原因...

我在那裏Object,因爲我退回StringModelAndView,現在我總是返回ModelAndView,所以我可以改變返回類型和它的作品。

+0

爲什麼在春季3中使用ModelAndView對象,只能返回一個字符串僅表示視圖名稱。 –

+0

@ProgMania這不是真的,[你可以返回其他對象](http://static.springsource.org/spring/docs/3.1.x/spring-framework-reference/html/mvc.html#mvc-ann-返回類型),只返回'Object'並不意味着它將被調度爲'View'。 – Xaerxess

+0

@Xaerxess是的,你可以返回其他對象作爲聲明,我說,返回的字符串代表視圖的名稱更容易。 –