[series Spring Boot] 8. Model Attribute

quydtkt

Administrator
1/11/19
365
35
28
26
Trong bài này, chúng ta sẽ cùng tìm hiểu về Model attribute trong Spring Boot.

1. Truyền dữ liệu từ controller lên view trong mô hình MVC
- Trong bài trước, chúng ta đã biết cách để đưa dữ liệu từ controller lên view thông qua request bằng cách sử dụng class HttpServletRequest.
- Trong Spring Boot, có thêm khái niệm model. Cũng tương tự như HttpServletRequest, model giúp chuyển dữ liệu từ controller lên view.​

2. Cách sử dụng model attribute

a. Sử dụng thông qua model

HelloController.java
Java:
package vn.congdongjava.controller;
 
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.*;
 
@Controller
public class HelloController {
 
	@RequestMapping(value = "/", method = RequestMethod.GET)
	public String index(Model model) {
		model.addAttribute("name", "quydtkt");
		model.addAttribute("age", 26);
 
		return "index";
	}
}
- Để sử dụng model, ta khai báo biến Model là tham số đầu vào của request mapper. Spring Boot sẽ tự khởi tạo biến cho chúng ta sử dụng mà không cần phải tự khởi tạo.
- Để đưa dữ liệu vào model, ta sử dụng phương thức addAttribute (tương tự setAttribute của HttpServletRequest).​

index.html
HTML:
<!DOCTYPE HTML>
<html>
<head>
	<meta charset="utf-8">
	<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
	<title>Cộng đồng Java - Model attribute</title>
</head>
<body>
Name [[${name}]]<br/>
Age [[${age}]]
</body>
</html>
Chạy project và truy cập vào link http://localhost:8080


b. Sử dụng annotation @ModelAttribute

WelcomeController.java
Java:
package vn.congdongjava.controller;
 
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import vn.congdongjava.vo.PersonItem;
 
@Controller
public class WelcomeController {
 
	@ModelAttribute(value = "address")
	public String getAddress() {
		return "HCM";
	}
 
	@RequestMapping(value = "/welcome", method = RequestMethod.GET)
	public String show(@ModelAttribute(value = "person")PersonItem person) {
		person.setName("quydtkt");
		person.setAge(26);
 
		return "welcome";
	}
}
- Có thể đưa dữ liệu vào model bằng cách đánh dấu tham số đầu vào của request mapper hoặc public method trong controller bằng annotation @ModelAttribute
- Key của model attribute trong trường hợp này là giá trị tham số value của annotation @ModelAttribute
- Khi sử dụng annotation @ModelAttribute với tham số đầu vào của request mapper, Spring Boot sẽ tự khởi tạo đối tượng, chúng ta không cần khởi tao và cũng không được khởi tạo lại, nếu không tham chiếu của model attribute tới đối tượng dữ bị mất.​

welcome.html
HTML:
<!DOCTYPE HTML>
<html>
<head>
	<meta charset="utf-8">
	<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
	<title>Cộng đồng Java - Model attribute</title>
</head>
<body>
Name [[${person.name}]]<br/>
Age [[${person.age}]]<br/>
Address [[${address}]]
</body>
</html>
Chạy project và truy cập link http://localhost:8080/welcome



Cám ơn các bạn đã theo dõi. Hẹn gặp lại trong bài viết tiếp theo :)
 

Attachments

Sửa lần cuối:

Joe

Thành viên VIP
21/1/13
2,935
1,304
113
...Oh, don't trust the diva Google. Trust the litte person and it's more reliable. A hint: create an account at this site: https://imgbb.com/ and your pics always show up :-*
 
  • Like
Reactions: quydtkt