Model, ModelMap และ ModelAndView ใน Spring MVC

1. ภาพรวม

ในบทความนี้เราจะมาดูการใช้ core org.springframework.ui.Model , org.springframework.ui.ModelMapและorg.springframework.web.servlet.ModelAndViewโดย Spring MVC

2. การพึ่งพา Maven

เริ่มต้นด้วยการพึ่งพาบริบทฤดูใบไม้ผลิในไฟล์pom.xmlของเรา:

 org.springframework spring-context 5.2.2.RELEASE 

เวอร์ชันล่าสุดของการพึ่งพาบริบทฤดูใบไม้ผลิสามารถพบได้ที่นี่

สำหรับModelAndViewที่ฤดูใบไม้ผลิเว็บพึ่งพาจะต้อง:

 org.springframework spring-web 5.2.2.RELEASE 

เวอร์ชันล่าสุดของ Spring-web dependency สามารถพบได้ที่นี่

และถ้าเราใช้ Thymeleaf เป็นมุมมองของเราเราควรเพิ่มการอ้างอิงนี้ใน pom.xml:

 org.thymeleaf thymeleaf-spring5 3.0.11.RELEASE 

สามารถดูเวอร์ชันล่าสุดของ Thymeleaf dependency ได้ที่นี่

3. รุ่น

ขอเริ่มต้นด้วยแนวคิดพื้นฐานที่สุดที่นี่ - The รุ่น

พูดง่ายๆคือโมเดลสามารถจัดหาแอตทริบิวต์ที่ใช้สำหรับการแสดงผลมุมมอง

เพื่อให้ข้อมูลที่ใช้งานได้มีมุมมองเราเพียงแค่เพิ่มข้อมูลนี้ลงในออบเจ็กต์Model นอกจากนี้แผนที่ที่มีแอตทริบิวต์สามารถผสานเข้ากับอินสแตนซ์Model ได้ :

@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

เช่นเดียวกับอินเทอร์เฟซModelด้านบนModelMapยังใช้เพื่อส่งผ่านค่าเพื่อแสดงมุมมอง

ข้อดีของModelMapคือช่วยให้เราสามารถส่งผ่านชุดค่าต่างๆและปฏิบัติต่อค่าเหล่านี้ราวกับว่าอยู่ในแผนที่ :

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

5. ModelAndView

อินเตอร์เฟซที่สุดท้ายที่จะส่งผ่านค่าไปที่มุมมองเป็นModelAndView

อินเทอร์เฟซนี้ช่วยให้เราสามารถส่งผ่านข้อมูลทั้งหมดที่ Spring MVC ต้องการได้ในครั้งเดียว:

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

6. มุมมอง

ข้อมูลทั้งหมดที่เราวางไว้ในโมเดลเหล่านี้ถูกใช้โดยข้อมูลพร็อพเพอร์ตี้ - โดยทั่วไปมุมมองแบบเทมเพลตเพื่อแสดงผลหน้าเว็บ

หากเรามีไฟล์เทมเพลต Thymeleaf ที่กำหนดเป้าหมายโดยวิธีการควบคุมของเราเป็นมุมมองของพวกเขา พารามิเตอร์ที่ส่งผ่านแบบจำลองจะสามารถเข้าถึงได้จากภายในรหัส HTML ของ thymeleaf:

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

พารามิเตอร์ที่ส่งผ่านที่นี่ใช้ผ่านไวยากรณ์$ {message}ซึ่งเรียกว่าตัวยึดตำแหน่ง เครื่องมือแม่แบบ Thymeleaf จะแทนที่ตัวยึดตำแหน่งนี้ด้วยค่าจริงจากแอตทริบิวต์ที่มีชื่อเดียวกันที่ส่งผ่านโมเดล

7. สรุป

ในการกวดวิชาอย่างนี้เราได้กล่าวถึงสามแนวคิดหลักในฤดูใบไม้ผลิ MVC - The รุ่นที่ModelMapและModelAndView นอกจากนี้เรายังได้ดูตัวอย่างว่ามุมมองสามารถใช้ประโยชน์จากค่าเหล่านี้ได้อย่างไร

เช่นเคยการใช้งานตัวอย่างและข้อมูลโค้ดเหล่านี้สามารถพบได้ใน Github