2011-08-24 20 views
101

的 「字符串」 返回的ModelAndView哪一個更好,回報 「的ModelAndView」 或spring3控制器

@RequestMapping(value = "/list", method = RequestMethod.GET) 
public ModelAndView list(
    @UserAuth UserAuth user, 
    ModelAndView mav) { 

    if (!user.isAuthenticated()) { 
     mav.setViewName("redirect:http://www.test.com/login.jsp"); 
     return mav; 
    } 

    mav.setViewName("list"); 
    mav.addObject("articles", listService.getLists()); 

    return mav; 
} 

的方式返回的字符串

@RequestMapping(value = "/list", method = RequestMethod.GET) 
public String list(
    @UserAuth UserAuth user, 
    Model model) { 

    if (!user.isAuthenticated()) { 
     return "redirect:http://www.test.com/login.jsp"; 
    } 

    model.addAttribute("articles", listService.getLists()); 

    return "list"; 
} 

這些工作同樣的方式。哪種方法更好?有什麼區別?

回答

120

沒有更好的辦法。兩者都完全有效。你選擇哪一個取決於哪一個更適合你的應用程序--Spring允許你以任何方式執行。

從歷史上看,這兩種方法來自不同版本的Spring。在Spring 2.0之前,ModelAndView方法是從控制器返回模型和視圖信息的主要方式。現在您可以結合Model參數和String返回值,但舊方法仍然有效。

+5

因此String方法是新的。 – akshayb

+1

@skaffman你可以解釋一下,Spring的處理方式與預先設置contextpath等方式是否有區別。 – Keerthivasan

+0

請看看(http://stackoverflow.com/questions/37410839/spring-mvc-controller-working-but-not -creating-的指定響應-URL-IT-是/ 37412537#37412537)。而使用ModelAndView我得到了這個問題 –

14

我想加我2美分也。第二種方法更偏向於面向公約,即開發人員明確提及他的觀點,但隱含地說返回字符串是視圖名稱。所以編碼少,可讀性和標準性。使用ModelAndView比舊的方法好得多

相關問題