Mô hình trong ModelAndView từ Spring MVC là gì?


86

Có chức năng cơ bản này

protected ModelAndView handleRequestInternal(...) {
    ...
    return new ModelAndView("welcomePage", "WelcomeMessage", message);
}

Tôi biết rằng điều này sẽ trả về modelandView. Tôi biết đó welcomePagelà tên chế độ xem của mình nên điều đó có nghĩa là một cái gì đó giống như welcomepage.jspsẽ được gọi.

Nhưng tôi đang nhầm lẫn với phần Model là gì. Là gì WelcomeMessagemessagevà làm thế nào mô hình làm việc trong kịch bản đó?

Câu trả lời:


114

Mô hình trình bày một trình giữ chỗ để giữ thông tin bạn muốn hiển thị trên dạng xem. Nó có thể là một chuỗi, trong ví dụ trên của bạn, hoặc nó có thể là một đối tượng chứa nhiều thuộc tính.

ví dụ 1

Nếu bạn có...

return new ModelAndView("welcomePage","WelcomeMessage","Welcome!");

... thì trong jsp của bạn, để hiển thị thông báo, bạn sẽ thực hiện: -

Hello Stranger! ${WelcomeMessage} // displays Hello Stranger! Welcome!

Ví dụ 2

Nếu bạn có...

MyBean bean = new MyBean();
bean.setName("Mike!");
bean.setMessage("Meow!");

return new ModelAndView("welcomePage","model",bean);

... thì trong jsp của bạn, bạn có thể làm: -

Hello ${model.name}! {model.message} // displays Hello Mike! Meow!

4
vì vậy nó có nghĩa là WelcomeMessage là tên biến được sử dụng trong jsp và "Welcome!" . Bạn có thể vui lòng cho tôi biết nơi tôi có thể tìm thấy những điều đối số thứ hai có thể mất như bây giờ khác tôi hiểu rằng phải mất tên biến, tên model, là có bất cứ điều gì khác mà nó có thể mất

4
Đối số thứ hai đại diện cho tên hợp lý của mô hình của bạn. Bạn có thể gọi nó bằng bất kỳ tên nào bạn muốn, nhưng đây là tên bạn sẽ sử dụng khi tham chiếu mô hình của mình trong JSP. Trong ví dụ đầu tiên của tôi, tôi đã gọi nó WelcomeMessage, trong ví dụ thứ hai, tôi đã gọi nó model. Sử dụng một cái tên có ý nghĩa đối với bạn. Đối số thứ ba chứa thông tin ... nó có thể là một chuỗi đơn giản, hoặc một POJO hoặc một bản đồ ... về cơ bản là bất kỳ thông tin hữu ích nào bạn muốn hiển thị trong dạng xem.
limc

24
new ModelAndView("welcomePage", "WelcomeMessage", message);

là viết tắt của

ModelAndView mav = new ModelAndView();
mav.setViewName("welcomePage");
mav.addObject("WelcomeMessage", message);

Nhìn vào đoạn mã trên, bạn có thể thấy tên chế độ xem là "welcomePage". Của bạn ViewResolver(thường được thiết lập trong .../WEB-INF/spring-servlet.xml) sẽ chuyển nó thành Chế độ xem. Dòng cuối cùng của mã đặt một thuộc tính trong mô hình của bạn ( addObject("WelcomeMessage", message)). Đó là nơi mà mô hình phát huy tác dụng.


16

Tất cả đều được javadoc giải thích cho hàm tạo . Nó là một phương thức khởi tạo tiện lợi điền vào mô hình bằng một cặp thuộc tính / giá trị.

Vì thế ...

   new ModelAndView(view, name, value);

tương đương với:

   Map model = ...
   model.put(name, value);
   new ModelAndView(view, model);

14

Trong trường hợp này, chúng ta có 3 tham số trong Method là ModelandView .
Theo câu hỏi này, tham số đầu tiên rất dễ hiểu. Nó đại diện cho Chế độ xem sẽ được hiển thị cho khách hàng.
Hai tham số còn lại giống như The PointerThe Holder, do
đó bạn có thể tóm tắt nó như thế này

ModelAndView ( View, Pointer, Holder );

Con trỏ chỉ thông tin trong The Holder

Khi Bộ điều khiển liên kết Chế độ xem với thông tin này, thì trong quy trình đã nói, bạn có thể sử dụng Con trỏ trong trang JSP để truy cập thông tin được lưu trữ trong Người giữ để hiển thị thông tin được tôn trọng đó cho khách hàng.
Dưới đây là hình ảnh mô tả quy trình được tôn trọng.

return new ModelAndView("welcomePage", "WelcomeMessage", message);

nhập mô tả hình ảnh ở đây


2

Vâng, WelcomeMessage chỉ là một tên biến cho thông báo (mô hình thực tế với dữ liệu). Về cơ bản, bạn đang ràng buộc mô hình với welcomePage ở đây. Mô hình (thông báo) sẽ có sẵn trong welcomePage.jsp dưới dạng WelcomeMessage. Đây là một ví dụ đơn giản hơn:

ModelAndView("hello","myVar", "Hello World!");

Trong trường hợp này, mô hình của tôi là một chuỗi đơn giản (Trong các ứng dụng, đây sẽ là một POJO với dữ liệu được tìm nạp cho DB hoặc các nguồn khác.). Tôi đang gán nó cho myVar và chế độ xem của tôi là hello.jsp. Bây giờ, myVar có sẵn cho tôi trong hello.jsp và tôi có thể sử dụng nó để hiển thị.

Trong giao diện, bạn có thể truy cập dữ liệu mặc dù:

${myVar}

Tương tự, Bạn sẽ có thể truy cập mô hình thông qua biến WelcomeMessage.


0

ModelAndView: Bản thân cái tên đã giải thích nó là cấu trúc dữ liệu chứa dữ liệu Model và View.

Map() model=new HashMap(); 
model.put("key.name", "key.value");
new ModelAndView("view.name", model);

// or as follows

ModelAndView mav = new ModelAndView();
mav.setViewName("view.name");
mav.addObject("key.name", "key.value");

nếu mô hình chỉ chứa một giá trị duy nhất, chúng ta có thể viết như sau:

ModelAndView("view.name","key.name", "key.value");

0
@RequestMapping(value="/register",method=RequestMethod.POST)
   public ModelAndView postRegisterPage(HttpServletRequest request,HttpServletResponse response,
           @ModelAttribute("bean")RegisterModel bean)
   {
       RegisterService service = new RegisterService();
       boolean b = service.saveUser(bean);

       if(b)
       {
           return new ModelAndView("registerPage","errorMessage","Registered Successfully!");
       }
       else
       {
           return new ModelAndView("registerPage","errorMessage","ERROR!!");
       }
   }



/*  "registerPage" is the .jsp page -> which will viewed.
/* "errorMessage" is the variable that could be displayed in page using -> **${errorMessage}**
/* "Registered Successfully!" or "ERROR!!" is the message will be printed based on **if-else condition**
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.