Apa Model di ModelAndView dari Spring MVC?

87

Memiliki fungsi dasar ini

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

Saya tahu bahwa ini akan mengembalikan modelandView. Saya tahu itu welcomePageadalah nama tampilan saya sehingga itu berarti sesuatu seperti welcomepage.jspakan dipanggil.

Tapi saya bingung dengan apa itu Model part. Apa WelcomeMessagedan messagedan bagaimana Model bekerja dalam skenario itu?

Premraj
sumber

Jawaban:

115

Model ini menyajikan placeholder untuk menyimpan informasi yang ingin Anda tampilkan pada tampilan. Ini bisa berupa string, yang ada dalam contoh Anda di atas, atau bisa juga objek yang berisi sekumpulan properti.

Contoh 1

Jika Anda memiliki...

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

... lalu di jsp Anda, untuk menampilkan pesan tersebut, Anda akan melakukan: -

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

Contoh 2

Jika Anda memiliki...

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

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

... lalu di jsp Anda, Anda dapat melakukan: -

Hello ${model.name}! {model.message} // displays Hello Mike! Meow!
limc
sumber
4
jadi itu berarti WelcomeMessage adalah nama variabel yang akan digunakan di jsp dan "Selamat datang!" . Bisakah Anda memberi tahu saya di mana saya dapat menemukan hal-hal lain apa yang dapat diambil argumen kedua seperti sekarang saya mengerti bahwa ini membutuhkan nama variabel, nama model, apakah ada hal lain yang dapat dilakukan
4
Argumen kedua mewakili nama logis model Anda. Anda dapat menyebutnya dengan nama apa pun yang Anda inginkan, tetapi ini adalah nama yang akan Anda gunakan saat mereferensikan model Anda di JSP. Dalam contoh pertama saya, saya menyebutnya WelcomeMessage, pada contoh kedua, saya menyebutnya model. Gunakan nama yang masuk akal bagi Anda. Argumen ketiga berisi informasi ... bisa berupa string sederhana, atau POJO atau peta ... pada dasarnya informasi berguna apa pun yang ingin Anda tampilkan dalam tampilan.
limc
24
new ModelAndView("welcomePage", "WelcomeMessage", message);

adalah singkatan dari

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

Melihat kode di atas, Anda dapat melihat nama tampilan adalah "welcomePage". Anda ViewResolver(biasanya diatur dalam .../WEB-INF/spring-servlet.xml) akan menerjemahkan ini menjadi Tampilan. Baris terakhir kode menetapkan atribut dalam model Anda ( addObject("WelcomeMessage", message)). Di situlah model berperan.

tiga cangkir
sumber
16

Semuanya dijelaskan oleh javadoc untuk konstruktor . Ini adalah konstruktor praktis yang mengisi model dengan satu pasangan atribut / nilai.

Jadi ...

   new ModelAndView(view, name, value);

setara dengan:

   Map model = ...
   model.put(name, value);
   new ModelAndView(view, model);
Stephen C
sumber
14

Di sini, dalam kasus ini, kami memiliki 3 parameter dalam Metode yaitu ModelandView .
Menurut pertanyaan ini, parameter pertama mudah dipahami. Ini mewakili View yang akan ditampilkan ke klien.
Dua parameter lainnya sama seperti The Pointer dan The Holder.
Oleh karena itu, Anda dapat menyimpulkannya seperti ini

ModelAndView ( View, Pointer, Holder );

Pointer hanya menunjukkan informasi di Pemegang

Ketika Pengendali mengikat Tampilan dengan informasi ini, maka dalam proses tersebut, Anda dapat menggunakan Penunjuk di halaman JSP untuk mengakses informasi yang disimpan di Pemegang untuk menampilkan informasi yang dihormati itu kepada klien.
Berikut adalah gambaran visual dari proses yang dihormati.

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

masukkan deskripsi gambar di sini

Tahir Hussain Mir
sumber
2

Nah, WelcomeMessage hanyalah nama variabel untuk pesan (model aktual dengan data). Pada dasarnya, Anda mengikat model dengan welcomePage di sini. Model (pesan) akan tersedia di welcomePage.jsp sebagai WelcomeMessage. Berikut adalah contoh yang lebih sederhana:

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

Dalam kasus ini, model saya adalah string sederhana (Dalam aplikasi ini akan menjadi POJO dengan data diambil untuk DB atau sumber lain.). Saya menugaskannya ke myVar dan pandangan saya adalah hello.jsp. Sekarang, myVar tersedia untuk saya di hello.jsp dan saya dapat menggunakannya untuk tampilan.

Dalam tampilan, Anda dapat mengakses data:

${myVar}

Demikian pula, Anda akan dapat mengakses model melalui variabel WelcomeMessage.

Abdel Raoof
sumber
0

ModelAndView: Nama itu sendiri menjelaskan bahwa itu adalah struktur data yang berisi data Model dan Tampilan.

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");

jika model hanya berisi satu nilai, kita dapat menulis sebagai berikut:

ModelAndView("view.name","key.name", "key.value");
Premraj
sumber
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**
Sunil
sumber