2011-08-24 36 views
101

Cách lợi nhuận ModelAndViewĐó là tốt hơn, trở lại "ModelAndView" hoặc "String" trên bộ điều khiển 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; 
} 

Cách lợi nhuận Chuỗi

@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"; 
} 

Những công việc tương tự. đó là cách tốt hơn? và sự khác biệt là gì?

Trả lời

120

Không có cách nào tốt hơn. Cả hai đều hoàn toàn hợp lệ. Mà một trong những bạn chọn để sử dụng phụ thuộc vào một trong những phù hợp với ứng dụng của bạn tốt hơn - Mùa xuân cho phép bạn làm điều đó một trong hai cách.

Trong lịch sử, hai phương pháp tiếp cận đến từ các phiên bản khác nhau của Spring. Phương pháp ModelAndView là cách chính để trả về cả mô hình và thông tin xem từ bộ điều khiển trong giai đoạn trước mùa xuân 2.0. Bây giờ bạn có thể kết hợp thông số Model và giá trị trả về String, nhưng cách tiếp cận cũ vẫn hợp lệ.

+5

Do đó cách tiếp cận String là mới. – akshayb

+1

@skaffman Bạn có thể giải thích nếu có bất kỳ sự khác biệt nào trong cách xử lý của Spring giống như ngữ cảnh trước, vv .. – Keerthivasan

+0

hãy xem (http://stackoverflow.com/questions/37410839/spring-mvc-controller-working-but-not -creating-the-specified-response-url-it-là/37412537 # 37412537). trong khi sử dụng ModelAndView tôi gặp vấn đề này –

14

Tôi cũng muốn thêm 2 xu nữa. Cách tiếp cận thứ hai là nhiều hơn đối với nhà phát triển theo định hướng quy ước rõ ràng đề cập đến quan điểm của anh ta là gì nhưng ngầm của nó là chuỗi trả về là tên khung nhìn. Vì vậy, ít mã hóa, dễ đọc và tiêu chuẩn. Tốt hơn nhiều so với cách cũ hơn với ModelAndView

Các vấn đề liên quan