Công việc cuối cùng mà một action phải
thực hiện là chọn View để hiển thị và chia sẽ dữ liệu với view này.
Vì vậy kết quả return của một action thường là ModelAndView. Đối
tường này mang trong mình nó một đối tượng chứa dữ liệu (được gọi
là thuộc tính model) và tên của một view để chỉ rõ view cần hiển thị.
View thì cần đúng một cái, nhưng dữ liệu
được chia sẽ giữa action và view có thể cần nhiều hơn một đối tượng
hoặc không cần nên kết quả của Action khá đa dạng:
- ModelAndView: mang cả model và view
- String: chỉ mang view còn model sẽ được
chia sẽ tách riêng qua ModelMap
- Void: không hiển thị kết quả bằng view
mà sử dụng mã gửi trực tiếp qua đối tượng HttpServletResponse.
Return ModelAndView
Action sau sẽ trả về ModelAndView mang
theo view có tên là success và model có tên là user được sinh ra từ lớp
AccountInfo. Hơn thế nữa, ModelAndView còn đính kèm một attribute có tên
message.
@GetMapping("/greetingaccount")
public ModelAndView greetingAccount(){
Account account = new Account("van@codelean.vn", "Ha Van");
ModelAndView modelAndView = new ModelAndView("success", "user", account);
modelAndView.addObject("message", "Dang ky thanh cong");
return modelAndView;
}
Ở phía view có thể hiển thị dữ liệu
được chia sẽ từ action này theo một số cách sau:
Truy xuất và hiển thị email và message
trên trang jsp bằng cách sử dụng EL:
Buộc dữ liệu lên form spring
<form:form commandName="user">
Email: <form:input path="email"/>
</form:form>
Return String
Thay vì kết quả của action trả về
ModelAndView thì trường hợp này chỉ trả về String chỉ ra tên view muốn
hiển thị, còn model và thuộc tính đính kèm được đặt trong ModelMap. Với
cách viết này sẽ linh hoạt hơn vì tách rời view và model do đó được sử
dụng nhiều hơn.
@GetMapping("/greeting")
public String greeting(@RequestParam String username, Model model){
model.addAttribute("username", username);
return "index";
}
Return void
Đôi khi một action chỉ thực hiện một
công việc logic nào đó mà không cần có một view để hiển thị kết quả.
Trong trường hợp đó action không trả kết quả gì là lựa chọn tốt nhất.
Ví dụ sau đây khi khẩn cầu action thì
bạn sẽ nhận được kết quả hiển thị trên trang web là “Hello World” mà
không cần phải xây dựng View.
إرسال تعليق