2013-06-05 30 views
42

Điều này nghe có vẻ ngu ngốc đối với các chuyên gia trong số Spring nhưng tôi phải hỏi. Bạn quyết định khi nào nên sử dụng ModelAndView so với Model?Khi nào nên sử dụng ModelAndView vs Model vào mùa xuân?

Sau khi tất cả tôi đã nghiên cứu câu trả lời hay nhất tôi đã tìm thấy là this one. Nó đã đề cập rằng các ModelAndView là một cách cũ và Model với một String trả lại là một cách mới trong Spring.

Câu hỏi của tôi là chúng tôi sẽ từ chối cũ ModelAndView bây giờ chúng tôi có Model trong tay? Hoặc có bất kỳ trường hợp nào bạn cần sử dụng ModelAndView cho nó.

Ngoài ra, có ai biết lý do tại sao phải thay đổi ModelAndView thành ModelString giá trị là View và các lợi ích là gì?

Trả lời

39

Tôi luôn sử dụng phương pháp mà phương pháp điều khiển trả về ModelAndView. Đơn giản chỉ vì nó có xu hướng làm cho các phương thức điều khiển thêm một chút nữa. Các tham số của phương thức bây giờ là các tham số input. Và tất cả các dữ liệu liên quan output được chứa trong đối tượng được trả về từ phương thức.

Kiểu ModelAndView dường như cộng hưởng với những người không thích cập nhật thông số đầu vào thành phương pháp. Gắn bó với niềm tin rằng điều này sẽ tạo thành một tác dụng phụ, một mô hình nguy hiểm bởi vì bạn không thể dự đoán chính xác phương thức sẽ làm - Nó có thể trả về dữ liệu trong đối tượng trả về, hoặc nó có thể cập nhật bất cứ thứ gì trong bất kỳ đối số đầu vào nào.

Vì vậy, một số người vẫn sẽ tiếp tục thích ModelAndView.

Kiểu mới với thông số phương thức Model và chuỗi được trả về làm tên chế độ xem. Dường như đã đến từ một cách tiếp cận thiết kế hơi khác nhau. Ở đây các đối tượng mô hình được coi là loại sự kiện hoặc các mục được truyền cho nhiều trình xử lý, trước khi được trả về chế độ xem nơi chúng được hiển thị. Nó nhắc tôi cách các sự kiện được xử lý trong thế giới AWT/Swing. Mô hình này kết hợp chặt chẽ hơn với phương pháp mà nhiều trình xử lý có thể xây dựng trên các đối tượng Model, cho đến khi nó đạt đến một khung nhìn.

Vì vậy, vào cuối ngày, có vẻ như không phải là lý do nhất định để chỉ trích hoặc thúc đẩy một trong hai cách tiếp cận. Bạn nên sử dụng phong cách cảm thấy phù hợp hơn với triết lý thiết kế tổng thể của bạn.

Hy vọng điều này sẽ hữu ích.

+0

Nó hoạt động nhờ :) Đây là mã của tôi: '@RequestMapping (value = "STB1/home", method = RequestMethod.GET) \t công ModelAndView homeAction() { \t \t ModelAndView MAV = new ModelAndView ("STB1/home"); \t \t trả lại mav; // hiển thị /// /src/main/webapp/WEB-INF/jsp/STB1/home.jsp \t} ' – Sangimed

14

Một khác biệt mà tôi có thể nhận ra là với đối tượng ModelAndView bạn có thể đặt một tham chiếu trực tiếp đến một đối tượng xem:

ModelAndView mav = ... 
mav.setView(myView); 

Trong khi đó nếu bạn sử dụng Model và String, bạn cần một bộ giải quyết nhằm giải quyết các tên xem vào chế độ xem thực tế

public String myHandler(...) { 
    return "myviewname"; // has to have a resolver from "myviewname" into an actual view 
} 
+0

Mặc dù tôi đồng ý với điều này, tôi vẫn muốn có Trình giải quyết lượt xem giải quyết trang được hiển thị. –

0

Trong phối cảnh SEO, Chúng tôi có thể sử dụng ModelAndView để áp dụng chuyển hướng 301 nếu chúng tôi có bất kỳ yêu cầu nào cho điều đó, Chúng tôi không thể đạt được điều này bằng cách sử dụng Mô hình.

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