Model, ModelMap và ModelAndView trong Spring MVC

1. Khái quát chung

Trong bài viết này, chúng ta sẽ xem xét việc sử dụng lõi org.springframework.ui.Model , org.springframework.ui.ModelMaporg.springframework.web.servlet.ModelAndView do Spring MVC cung cấp.

2. Sự phụ thuộc của Maven

Hãy bắt đầu với sự phụ thuộc vào ngữ cảnh mùa xuân trong tệp pom.xml của chúng tôi :

 org.springframework spring-context 5.2.2.RELEASE 

Bạn có thể tìm thấy phiên bản mới nhất của sự phụ thuộc vào ngữ cảnh mùa xuân tại đây.

Đối với ModelAndView , cần có sự phụ thuộc vào Spring-web :

 org.springframework spring-web 5.2.2.RELEASE 

Bạn có thể tìm thấy phiên bản mới nhất của spring-web dependency tại đây.

Và, nếu chúng ta sử dụng Thymeleaf làm chế độ xem của mình, chúng ta nên thêm phụ thuộc này vào pom.xml:

 org.thymeleaf thymeleaf-spring5 3.0.11.RELEASE 

Bạn có thể tìm thấy phiên bản mới nhất của Thymeleaf dependency tại đây.

3. Mô hình

Hãy bắt đầu với khái niệm cơ bản nhất ở đây - Mô hình .

Nói một cách đơn giản, mô hình có thể cung cấp các thuộc tính được sử dụng để hiển thị các khung nhìn.

Để cung cấp chế độ xem với dữ liệu có thể sử dụng, chúng tôi chỉ cần thêm dữ liệu này vào đối tượng Model của nó . Ngoài ra, các bản đồ có thuộc tính có thể được hợp nhất với các phiên bản Mô hình :

@GetMapping("/showViewPage") public String passParametersWithModel(Model model) { Map map = new HashMap(); map.put("spring", "mvc"); model.addAttribute("message", "Baeldung"); model.mergeAttributes(map); return "viewPage"; }

4. ModelMap

Cũng giống như giao diện Model ở trên, ModelMap cũng được sử dụng để chuyển các giá trị để hiển thị một khung nhìn.

Ưu điểm của ModelMap là nó cho chúng ta khả năng truyền một tập hợp các giá trị và xử lý các giá trị này như thể chúng nằm trong một Bản đồ :

@GetMapping("/printViewPage") public String passParametersWithModelMap(ModelMap map) { map.addAttribute("welcomeMessage", "welcome"); map.addAttribute("message", "Baeldung"); return "viewPage"; }

5. ModelAndView

Giao diện cuối cùng để chuyển các giá trị cho một chế độ xem là ModelAndView .

Giao diện này cho phép chúng tôi chuyển tất cả thông tin được yêu cầu bởi Spring MVC trong một lần trả lại:

@GetMapping("/goToViewPage") public ModelAndView passParametersWithModelAndView() { ModelAndView modelAndView = new ModelAndView("viewPage"); modelAndView.addObject("message", "Baeldung"); return modelAndView; } 

6. Chế độ xem

Tất cả dữ liệu, chúng tôi đặt trong các mô hình này, được sử dụng bởi một chế độ xem - nói chung, một chế độ xem mẫu để hiển thị trang web.

Nếu chúng tôi có tệp mẫu Thymeleaf được nhắm mục tiêu bởi các phương pháp của bộ điều khiển của chúng tôi làm chế độ xem của họ. Một tham số được chuyển qua mô hình sẽ có thể truy cập được từ bên trong mã HTML thymeleaf:

   Title Web Application. Passed parameter : th:text="${message}" 

Tham số được truyền ở đây được sử dụng thông qua cú pháp $ {message} , được gọi là một trình giữ chỗ. Công cụ mẫu Thymeleaf sẽ thay thế trình giữ chỗ này bằng một giá trị thực tế từ một thuộc tính có cùng tên được chuyển qua mô hình.

7. Kết luận

Trong hướng dẫn nhanh này, chúng ta đã thảo luận về ba khái niệm cốt lõi trong Spring MVC - Model , ModelMapModelAndView . Chúng tôi cũng đã xem xét các ví dụ về cách chế độ xem có thể sử dụng các giá trị này.

Như mọi khi, việc triển khai tất cả các ví dụ và đoạn mã này có thể được tìm thấy trên Github.