Trong mô hình MVC, controller sẽ đưa dữ liệu vào model và những dữ liệu này sẽ được sử dụng trên view. Trong bài viết này, chúng ta sẽ tìm hiểu làm thế nào để đưa dữ liệu vào model trong controller của Spring MVC các bạn nhé!
Spring MVC thể hiện rất rõ mô hình MVC, nó cung cấp cho chúng ta một số đối tượng để lưu trữ dữ liệu cho model, đó là:
- java.util.Map
- org.springframework.ui.Model
- org.springframework.ui.ModelMap
Chúng ta chỉ cần khai báo các đối tượng này là một tham số của phương thức trong controller của Spring MVC. Mỗi đối tượng sẽ có các phương thức giúp chúng ta có thể thêm dữ liệu vào model với key và value.
Sử dụng đối tượng Model
Trong ví dụ của bài viết trước, phương thức home() đã sử dụng đối tượng Model để lưu trữ dữ liệu cho model:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 |
package com.huongdanjava.springmvc; import java.text.DateFormat; import java.util.Date; import java.util.Locale; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; /** * Handles requests for the application home page. */ @Controller public class HomeController { private static final Logger logger = LoggerFactory.getLogger(HomeController.class); /** * Simply selects the home view to render by returning its name. */ @RequestMapping(value = "/", method = RequestMethod.GET) public String home(Locale locale, Model model) { logger.info("Welcome home! The client locale is {}.", locale); Date date = new Date(); DateFormat dateFormat = DateFormat.getDateTimeInstance(DateFormat.LONG, DateFormat.LONG, locale); String formattedDate = dateFormat.format(date); model.addAttribute("serverTime", formattedDate); return "home"; } } |
Như các bạn thấy, trong đối tượng Model có phương thức addAttribute() được sử dụng để thêm dữ liệu vào model. Phương thức này có 2 tham số với key kiểu dữ liệu String và value kiểu dữ liệu Object.
Sử dụng đối tượng Map
Với đối tượng Map thì có lẽ các bạn sẽ quen thuộc hơn vì nó là một đối tượng của Java. Chúng ta có thể khai báo như sau:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 |
package com.huongdanjava.springmvc; import java.text.DateFormat; import java.util.Date; import java.util.Locale; import java.util.Map; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; /** * Handles requests for the application home page. */ @Controller public class HomeController { private static final Logger logger = LoggerFactory.getLogger(HomeController.class); /** * Simply selects the home view to render by returning its name. */ @RequestMapping(value = "/", method = RequestMethod.GET) public String home(Locale locale, Map<String, Object> model) { logger.info("Welcome home! The client locale is {}.", locale); Date date = new Date(); DateFormat dateFormat = DateFormat.getDateTimeInstance(DateFormat.LONG, DateFormat.LONG, locale); String formattedDate = dateFormat.format(date); model.put("serverTime", formattedDate); return "home"; } } |
Sử dụng đối tượng ModelMap
ModelMap là đối tượng implement Map interface trong Java nên nó cũng tương tự như đối tượng Map ở trên. Chúng ta có thể sử dụng phương thức put() của đối tượng Map, ngoài ra ModelMap còn hỗ trợ một số phương thức khác để đưa dữ liệu vào model.
Chúng ta có thể khai báo như sau:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 |
package com.huongdanjava.springmvc; import java.text.DateFormat; import java.util.Date; import java.util.Locale; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.stereotype.Controller; import org.springframework.ui.ModelMap; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; /** * Handles requests for the application home page. */ @Controller public class HomeController { private static final Logger logger = LoggerFactory.getLogger(HomeController.class); /** * Simply selects the home view to render by returning its name. */ @RequestMapping(value = "/", method = RequestMethod.GET) public String home(Locale locale, ModelMap model) { logger.info("Welcome home! The client locale is {}.", locale); Date date = new Date(); DateFormat dateFormat = DateFormat.getDateTimeInstance(DateFormat.LONG, DateFormat.LONG, locale); String formattedDate = dateFormat.format(date); model.addAttribute("serverTime", formattedDate); return "home"; } } |
Kết quả
Tất cả các đối tượng trên đều cho chúng ta kết quả như nhau:
Xia Xia
làm bài viết đưa dữ liệu từ database xuống đi ad
X981
Mình thấy có 1 cách khác nữa là dùng ModelAndView để đưa dữ liệu cho view, vậy cái này có gì khác so với 3 đối tượng trên?
Chung
ModelAndView cũng là để đưa dữ liệu cho view nhưng chỉ khác ở chỗ bạn phải thêm tên view vào nữa mà thôi. Mình cũng hay dùng cách này
Khanh Nguyen
Thanks all, Khanh sẽ update bài viết để thêm cách này.
Xi Ao Hu
làm bài viết đưa dữ liệu từ database xuống đi ad
Admin
thank mình sẽ update thêm