Model ใน ModelAndView จาก Spring MVC คืออะไร


87

มีฟังก์ชันพื้นฐานนี้

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

ฉันรู้ว่าสิ่งนี้จะส่งคืน modelandView ฉันรู้ว่านั่นwelcomePageคือ Viewname ของฉันซึ่งหมายความว่าwelcomepage.jspจะมีการเรียกชื่อ

แต่ฉันสับสนกับ Model part คืออะไร คืออะไรWelcomeMessageและmessageและวิธีการแบบการทำงานในสถานการณ์ที่?

คำตอบ:


115

โมเดลนำเสนอตัวยึดเพื่อเก็บข้อมูลที่คุณต้องการแสดงบนมุมมอง อาจเป็นสตริงซึ่งอยู่ในตัวอย่างข้างต้นของคุณหรืออาจเป็นอ็อบเจ็กต์ที่มีคุณสมบัติมากมาย

ตัวอย่าง 1

ถ้าคุณมี...

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

... จากนั้นใน jsp ของคุณเพื่อแสดงข้อความคุณจะทำ: -

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

ตัวอย่าง 2

ถ้าคุณมี...

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

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

... จากนั้นใน jsp ของคุณคุณสามารถทำได้: -

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

4
ดังนั้นจึงหมายความว่า WelcomeMessage เป็นชื่อตัวแปรที่จะใช้ใน jsp และ "Welcome!" . คุณช่วยบอกฉันได้ไหมว่าฉันสามารถหาสิ่งอื่นใดที่อาร์กิวเมนต์ที่สองสามารถนำไปใช้เช่นตอนนี้ฉันเข้าใจแล้วว่ามันต้องใช้ชื่อตัวแปรชื่อรุ่นมีสิ่งอื่นที่สามารถใช้ได้หรือไม่

4
อาร์กิวเมนต์ที่สองแสดงถึงชื่อตรรกะของโมเดลของคุณ คุณสามารถเรียกมันว่าชื่ออะไรก็ได้ที่คุณต้องการ แต่นี่คือชื่อที่คุณจะใช้เมื่ออ้างอิงโมเดลของคุณใน JSP ของคุณ ในตัวอย่างแรกของฉันฉันเรียกมันว่าในตัวอย่างที่สองผมเรียกมันว่าWelcomeMessage modelใช้ชื่อที่เหมาะสมกับคุณ อาร์กิวเมนต์ที่สามเก็บข้อมูล ... อาจเป็นสตริงธรรมดาหรือ POJO หรือแผนที่ ... โดยพื้นฐานแล้วข้อมูลที่เป็นประโยชน์ใด ๆ ที่คุณต้องการแสดงในมุมมอง
limc

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

เป็นชวเลขสำหรับ

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

เมื่อดูโค้ดด้านบนคุณจะเห็นชื่อมุมมองคือ "welcomePage" ของคุณViewResolver(มักจะติดตั้งใน.../WEB-INF/spring-servlet.xml) จะแปลนี้เป็นดู บรรทัดสุดท้ายของโค้ดจะกำหนดแอตทริบิวต์ในโมเดลของคุณ ( addObject("WelcomeMessage", message)) นั่นคือจุดเริ่มต้นของโมเดล


16

มันเป็นสิ่งที่อธิบายได้ด้วย Javadoc สำหรับการสร้าง เป็นตัวสร้างความสะดวกที่เติมโมเดลด้วยคู่แอตทริบิวต์ / ค่าหนึ่งคู่

ดังนั้น ...

   new ModelAndView(view, name, value);

เทียบเท่ากับ:

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

14

ที่นี่ในกรณีนี้เรามี 3 พารามิเตอร์ในวิธี ได้แก่ModelandView
ตามคำถามนี้พารามิเตอร์แรกเข้าใจได้ง่าย แสดงถึงมุมมองที่จะแสดงต่อไคลเอนต์
อีกสองพารามิเตอร์ก็เหมือนกับตัวชี้และตัวยึด
ดังนั้นคุณสามารถสรุปได้ดังนี้

ModelAndView ( View, Pointer, Holder );

ตัวชี้เพียงชี้ข้อมูลในThe Holder

เมื่อคอนโทรลเลอร์ผูกViewกับข้อมูลนี้จากนั้นในกระบวนการดังกล่าวคุณสามารถใช้The PointerในเพจJSPเพื่อเข้าถึงข้อมูลที่จัดเก็บในThe Holderเพื่อแสดงข้อมูลที่เคารพต่อไคลเอ็นต์
นี่คือการพรรณนาภาพของกระบวนการที่เคารพ

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

ป้อนคำอธิบายภาพที่นี่


2

WelcomeMessage เป็นเพียงชื่อตัวแปรสำหรับข้อความ (แบบจำลองจริงพร้อมข้อมูล) โดยพื้นฐานแล้วคุณจะผูกโมเดลกับ welcomePage ที่นี่ Model (ข้อความ) จะอยู่ใน welcomePage.jsp เป็น WelcomeMessage นี่คือตัวอย่างที่ง่ายกว่า:

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

ในกรณีนี้โมเดลของฉันเป็นสตริงธรรมดา (ในแอปพลิเคชันนี่จะเป็น POJO ที่มีข้อมูลที่ดึงมาจากฐานข้อมูลหรือแหล่งข้อมูลอื่น ๆ ) ฉันกำหนดให้ myVar และมุมมองของฉันคือ hello.jsp ตอนนี้ myVar พร้อมใช้งานสำหรับฉันใน hello.jsp และฉันสามารถใช้เพื่อแสดงผลได้

ในมุมมองคุณสามารถเข้าถึงข้อมูลได้แม้ว่า:

${myVar}

ในทำนองเดียวกันคุณจะสามารถเข้าถึงโมเดลผ่านตัวแปร WelcomeMessage


0

ModelAndView:ชื่อนี้อธิบายว่าเป็นโครงสร้างข้อมูลที่มีข้อมูล Model และ 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");

หากโมเดลมีเพียงค่าเดียวเราสามารถเขียนได้ดังนี้:

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**
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.