Bu dersimizde daha önce giriş yaptığımız ve genel olarak yapısı ve configurasyon ayarları üzerinden geçtiğimiz Spring MVC Form Validayonu ile devam ediyoruz.
Bu örneğimizde bir form oluşturacağız ve form propertilerine değerler bağlayacağız.
Genel olarak Form Handler yapısını anlatmaya çalışacağım için yazım biraz uzun olabilir ama kolay takip edilebilir olması için önce yapıyı anlatıp sonra örnek yapacağız. Bu yazımdan sonra örneğide incelemenizi tavsiye ederim.
Spring MVC de Form submit edildiğinde handle edebilmek için Form Controller'lar kullanılır. Kendi Form Controller'ınızı yazmak için yalnızca SimpleFormControlle'dan türetmeniz ve metodlarını override etmeniz yeterli olacaktır.
1. Binding Values
SimpleFormController constructor metodu içerisinde hangi HTML form'u ile ilişkilendireceğinizi ve form içerisinde kullanacağınız model veya nesneleri burada tanımlıyoruz.public class StudentController extends SimpleFormController{ //... public StudentController(){ setCommandClass(Student.class); setCommandName("studentForm"); }
- setCommandClass(Student.class) – Form propertileri Student objesi içerisinde tutulur.
- setCommandName(“studentForm”) – "studentForm" action ismine sahip HTML form'u submit edildiğinde Spring request'i bu Controller'a yönlendirir.
2. Form Submission
Html form'u submit edildiğinde Controller'ın onSubmit() metodu execute edilecektir. Submit edilen form propertileri burada handle edilecektir ve eğer validasyonları geçmiş başarılı olaylarsa bu metod bir ModelAndView nesnesi döndürür.public class StudentController extends SimpleFormController{ //... @Override protected ModelAndView onSubmit(HttpServletRequest request, HttpServletResponse response, Object command, BindException errors) throws Exception { Student student= (Student )command; System.out.println(student); return new ModelAndView("studentSuccess","student",student); }
3. Initialization
Bazı durumlarda Form bileşenlerinin değerlerini form render edilmeden ilklenmesini isteyebilirsiniz. Yani form bileşenlerinin ilk başta default bir değeri olsun diyebilirsiniz. Bu durumda formBackingObject() metodunu override etmelisiniz.public class StudentController extends SimpleFormController{ //... @Override protected Object formBackingObject(HttpServletRequest request) throws Exception { Student student = new Student(); student.setLesson(new String []{"Data Structure"}); return student ; }
4. Data Referencing
HTML form'u içerisinde ihtiyaç duyduğunuz checkbox değerleri, dropbox değerleri (selection values) vs gibi liste verilerini bu metod içerinde doldurabilirsiniz.public class StudentController extends SimpleFormController{ //... @Override protected Map referenceData(HttpServletRequest request) throws Exception { Map referenceData = new HashMap(); //Data referencing for web framework checkboxes ListlessonList = new ArrayList (); lessonList.add("Data Structure"); lessonList.add("Database"); lessonList.add("Algorithm"); lessonList.add("Object Oriented Programming"); referenceData.put("lessonList", lessonList); return referenceData; }
5. SimpleFormController Bean
Son olarak oluşturduğumuz Controller'ı bir bean olarak ekliyoruz. Ve formView ve successView properti değerlerini ezerek kendi hazırladığımız view'leri set ediyoruz. Bu iki properti değeri InternalResourceViewResolver bean'i ile birlikte bize doğru viewlerin dönmesini sağlar.- "formView" > "/WEB-INF/jsp/studentForm.jsp".
- "successView" > "/WEB-INF/jsp/studentSuccess.jsp".
Hiç yorum yok :
Yorum Gönder