5 Ağustos 2013 Pazartesi

Spring MVC Form Handling Mekanizması / Spring MVC Form Validasyonu

Merhaba arkadaşlar,

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
  List lessonList = 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".
Evet arkadaşlar, genel olarak Spring MVC 'nin Form Handling mekanizmasını anlattım. Bir sonraki yazımda bu anlattıklarımı örnekleyeceğim. Örnek yazıma buradan ulaşabilirsiniz.

Hiç yorum yok :

Yorum Gönder