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:
  • ${user.email}
  • ${message}

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.

Post a Comment

Mới hơn Cũ hơn