1. Gambaran keseluruhan
Dalam artikel ini, kita akan membincangkan bentuk Spring dan pengikatan data kepada pengawal. Juga, kita akan melihat salah satu anotasi utama di Spring MVC iaitu @ModelAttribute .
Sudah tentu, Spring MVC adalah topik yang rumit dengan banyak perkara yang perlu anda fahami untuk menggunakannya sepenuhnya, jadi pasti menggali lebih mendalam mengenai kerangka di sini.
2. Model
Pertama - mari tentukan entiti mudah yang akan kita paparkan dan terikat dengan bentuk:
public class Employee { private String name; private long id; private String contactNumber; // standard getters and setters }
Ini akan menjadi objek penyokong bentuk kita.
3. Pandangan
Seterusnya - mari kita tentukan bentuk sebenar , dan tentu saja, fail HTML yang mengandunginya. Kami akan menggunakan halaman di mana pekerja baru dibuat / didaftarkan:
Welcome, Enter The Employee Details
Name
Id
Contact Number
Pertama - perhatikan bahawa kami memasukkan pustaka tag ke halaman JSP kami - borang taglib - untuk membantu menentukan borang kami.
Seterusnya - tag memainkan peranan penting di sini; ia sangat serupa dengan HTLM biasatag tetapi atribut modelAttribute adalah kunci yang menentukan nama objek model yang menyokong bentuk ini:
Ini akan sesuai dengan @ModelAttribute di kemudian hari di pengawal.
Seterusnya - setiap medan input menggunakan satu lagi tag berguna dari spring form taglib - form: awalan . Setiap bidang ini menyatakan satu jalan atribut - ini mesti sesuai dengan yang getter / penetap atribut model (dalam kes ini, kelas pekerja itu). Ketika halaman dimuat, medan input diisi oleh Spring, yang memanggil penerima setiap bidang terikat ke bidang input. Apabila borang diserahkan, setter dipanggil untuk menyimpan nilai-nilai bentuk ke objek.
Akhirnya - apabila borang dihantar , pengendali POST di pengawal dipanggil dan borang secara automatik terikat kepada argumen pekerja yang kami sampaikan.
4. Pengawal
Sekarang, mari kita lihat Pengawal yang akan mengendalikan bahagian belakang:
@Controller public class EmployeeController { @RequestMapping(value = "/employee", method = RequestMethod.GET) public ModelAndView showForm() { return new ModelAndView("employeeHome", "employee", new Employee()); } @RequestMapping(value = "/addEmployee", method = RequestMethod.POST) public String submit(@Valid @ModelAttribute("employee")Employee employee, BindingResult result, ModelMap model) { if (result.hasErrors()) { return "error"; } model.addAttribute("name", employee.getName()); model.addAttribute("contactNumber", employee.getContactNumber()); model.addAttribute("id", employee.getId()); return "employeeView"; } }
Pengawal menentukan dua operasi mudah - GET untuk memaparkan data dalam bentuk, dan POST untuk operasi buat, melalui pengiriman borang.
Juga perhatikan bahawa jika objek yang disebut "karyawan" tidak ditambahkan ke model, Spring akan mengeluh ketika kami mencoba mengakses JSP kerana JSP akan disiapkan untuk mengikat formulir ke atribut model "pekerja":
java.lang.IllegalStateException: Neither BindingResult nor plain target object for bean name 'employee' available as request attribute at o.s.w.s.s.BindStatus.(BindStatus.java:141)
Untuk mengakses objek sokongan borang kami, kami perlu memasukkannya melalui anotasi @ModelAttribute .
Yang @ModelAttribute
pada kaedah hujah menunjukkan hujah akan diambil dari model. Sekiranya tidak hadir dalam model, argumen akan dibuat terlebih dahulu dan kemudian ditambahkan ke model.
5. Mengendalikan Kesalahan Ikatan
Secara lalai, Spring MVC melontarkan pengecualian apabila kesalahan berlaku semasa mengikat permintaan. Ini biasanya tidak seperti yang kita mahukan, sebaliknya, kita harus menunjukkan kesalahan ini kepada pengguna. Kami akan menggunakan BindingResult dengan menambahkannya sebagai hujah pada kaedah pengawal kami:
public String submit( @Valid @ModelAttribute("employee") Employee employee, BindingResult result, ModelMap model)
The BindingResult keperluan hujah untuk diletakkan selepas sokongan objek borang kami - ia adalah salah satu kes yang jarang berlaku di mana perintah kaedah hujah perkara. Jika tidak, kami akan mengalami pengecualian berikut:
java.lang.IllegalStateException: Errors/BindingResult argument declared without preceding model attribute. Check your handler method signature!
Sekarang - pengecualian tidak lagi dilemparkan; sebaliknya, kesilapan akan didaftarkan pada BindingResult yang diluluskan untuk mengemukakan kaedah. Pada ketika ini, kita dapat mengatasi kesalahan ini dengan pelbagai cara - contohnya, operasi dapat dibatalkan:
@RequestMapping(value = "/addEmployee", method = RequestMethod.POST) public String submit(@Valid @ModelAttribute("employee")Employee employee, BindingResult result, ModelMap model) { if (result.hasErrors()) { return "error"; } //Do Something return "employeeView"; }
Perhatikan bagaimana, jika hasilnya mengandung kesalahan, kita mengembalikan pandangan lain kepada pengguna untuk menampilkan kesalahan ini dengan betul. Mari lihat pandangan itu - error.jsp :
Please enter the correct details
Retry
6. Mempamerkan Pekerja
Akhirnya, selain mencipta pekerja baru, kita juga boleh memaparkannya - inilah kod pandangan pantas untuk itu:
Submitted Employee Information
Name :
${name}
ID :
${id}
Contact Number :
${contactNumber}
Halaman JSP hanya menggunakan ekspresi EL untuk memaparkan nilai sifat objek Karyawan dalam model.
7. Menguji Aplikasi
Aplikasi mudah boleh digunakan - misalnya di pelayan Tomcat - dan diakses secara tempatan:
// localhost: 8080 / spring-mvc-xml / pekerja
Ini adalah paparan yang mengandungi borang utama - sebelum operasi menghantar:

Contoh Spring MVC Form - Hantar
Setelah menyerahkan, data akan dipaparkan:

Contoh Spring MVC Form - Lihat
Dan itu sahaja - contoh kerja bentuk ringkas dengan Spring MVC, dengan pengesahan .
Pelaksanaan tutorial MVC Spring ini boleh didapati di projek GitHub - ini adalah projek berasaskan Maven, jadi semestinya mudah diimport dan dijalankan sebagaimana adanya.
Akhirnya, seperti yang saya katakan tepat pada awal artikel, anda pasti harus menggali lebih dalam Spring MVC.