5 Ağustos 2013 Pazartesi

Spring MVC Form Handling Example / Spring MVC Form Validasyon Örneği

Merhaba arkadaşlar,

Bu dersimizde daha önce giriş yaptığımız ve genel olarak Spring MVC'nin Form Handling mekanizmasını anlattığım yazımın devamı olarak bir örnek yapacağım. Eğer Form Handling mekanizmasını bilmiyorsanız örnekten önce buradaki yazımı okumanızı tavsiye ederim.
Bu örneğimizde bir form oluşturacağız ve form propertilerine değerler bağlayacağız.

Örneğimizde Kullandığımız Teknolojiler;
  1. Spring 2.5
  2. JDK 1.6
  3. Netbeans 7.2
  4. Apache Tomcat 7.0
Daha önce proje oluşturmayada değindiğimiz için burada proje oluşturmaya değinmeyeceğim. Dileyen arkadaşlar proje oluşturma ile ilgili yazımı buradan inceleyebilirler.

Yazımızın sonunda elimizde olacak proje dizin yapısı yanda görüldüğü şekilde arkadaşlar.

Bu örneğimizde textbox,textarea,checkbox,radiobutton,select option Spring tag'leri kullanacağız. Bu form'a ait validayonları gerçekleştireceğiz ve Spring Form Handling mekanizmasını işleten SimpleFormController controllerımızı yazacağız.








1. Model


Form properti değerlerini tutmak için model olarak Student nesnemizi kullanacağız.

Student.java

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package com.spring.mvc.form;

/**
 *
 * @author ahmet.boz
 */
public class Student {
    private String name;
    private String surName;
    private String number;
    private String foreignLanguages;
    private String sex;
    private String[] lesson;
    
    public Student(){}

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getSurName() {
        return surName;
    }

    public void setSurName(String surName) {
        this.surName = surName;
    }

    public String getNumber() {
        return number;
    }

    public void setNumber(String number) {
        this.number = number;
    }

    public String getForeignLanguages() {
        return foreignLanguages;
    }

    public void setForeignLanguages(String foreignLanguages) {
        this.foreignLanguages = foreignLanguages;
    }

    public String getSex() {
        return sex;
    }

    public void setSex(String sex) {
        this.sex = sex;
    }

    public String[] getLesson() {
        return lesson;
    }

    public void setLesson(String[] lesson) {
        this.lesson = lesson;
    }
}

2. Form Controller

SimpleFormController'dan türeyen Controller'ımız form submit edildiğinde form'u handler eder.

StudentController.java

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package com.spring.mvc.controller;

import com.spring.mvc.form.Student;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.validation.BindException;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.SimpleFormController;

/**
 *
 * @author ahmet.boz
 */
public class StudentController extends SimpleFormController{
 
 public StudentController(){
            //form içerisinde kullanacağımız model'imiz
            setCommandClass(Student.class);
            //hangi formla ilişkilendireceksek ismini set ediyoruz.
            setCommandName("studentForm");
 }
 
 @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);
 
 }
 
 @Override
 protected Object formBackingObject(HttpServletRequest request)
  throws Exception {
 
  Student student = new Student();
  //Data Structure dersini default seçili yap 
  student.setLesson(new String []{"Data Structure"});
 
  //"Male" değerini default seçili yap
  student.setSex("M");
 
  //İngilizce değerini default seçili yap
  student.setForeignLanguages("English");
 
  return student;
 }
 
 @Override
 protected Map referenceData(HttpServletRequest request) throws Exception {
 
  Map referenceData = new HashMap();
 
  //Data referencing for lessons checkboxes
  List lessonList = new ArrayList();
  lessonList.add("Data Structure");
  lessonList.add("Database");
  lessonList.add("Algorithm");
  lessonList.add("Object Oriented Programming");
  referenceData.put("lessonList", lessonList);
 
  //Data referencing for number radiobuttons
  List numberList = new ArrayList();
  numberList.add("Number 1");
  numberList.add("Number 2");
  numberList.add("Number 3");
  numberList.add("Number 4");
  numberList.add("Number 5");
  referenceData.put("numberList", numberList);
                
                //Data referencing for java languages list box
  Map foreignLanguageList = new LinkedHashMap();
  foreignLanguageList.put("Turkish", "Turkish");
  foreignLanguageList.put("English", "English");
  foreignLanguageList.put("French", "French");
  foreignLanguageList.put("German", "German");
  referenceData.put("foreignLanguageList", foreignLanguageList);
 
  return referenceData;
 }
}

3. Form Validator

Bu kısımda Form değerleri için tanımlamak istediğiniz validasyon kurallarını işletebilirsiniz. Form değerlerinin boş geçilmemesi. Alanların uzunluğu, geçerli email değerleri vs. gibi.
Gerekli resource değerlerini Bundle'dan okuyarak validayon mesajlarını sistemden ayırabilirsiniz. Burada dikkat etmeniz gereken validasyonları doğru Form propertileri için set etmeniz.

StudentValidator.java

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package com.spring.mvc.validator;

import com.spring.mvc.form.Student;
import org.springframework.validation.Errors;
import org.springframework.validation.ValidationUtils;
import org.springframework.validation.Validator;

/**
 *
 * @author ahmet.boz
 */
public class StudentValidator  implements Validator{
 
 @Override
 public boolean supports(Class clazz) {
  //just validate the Student instances
  return Student.class.isAssignableFrom(clazz);
 }
 
 @Override
 public void validate(Object target, Errors errors) {
 
  ValidationUtils.rejectIfEmptyOrWhitespace(errors, "name",
   "required.name", "Field name is required.");
  ValidationUtils.rejectIfEmptyOrWhitespace(errors, "surName",
   "required.surName", "Field name is required.");
  ValidationUtils.rejectIfEmptyOrWhitespace(errors, "sex", 
   "required.sex", "Field name is required.");
  ValidationUtils.rejectIfEmptyOrWhitespace(errors, "foreignLanguages", 
   "required.foreignLanguages", "Field name is required.");
 
  Student cust = (Student)target;
 
  if(cust.getLesson().length==0){
   errors.rejectValue("lesson", "required.lesson");
  }
  if("NONE".equals(cust.getNumber())){
   errors.rejectValue("number", "required.number");
  }
 }
}

mesajlar.properties

required.name = Name is required!
required.surName = Surname is required!
required.lesson = Please select at least a lesson!
required.sex = Please select a sex!
required.foreignLanguages = Please select a foreign language!
required.number = Please select a number!

4. View

Validayondan dönen form değerleri hata mesajlarını <form:errors /> tagi ile gösterilebilir.

studentForm.jsp

<%-- 
    Document   : studentForm
    Created on : 05.Ağu.2013, 05:03:46
    Author     : ahmet.boz
--%>

<%@page contentType="text/html" pageEncoding="UTF-8"%>
<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>





 

Spring's form tags example

Name :
Surname :
Lessons :
Sex : Male Female
Chose a number :
Foreign Language :

studentSuccess.jsp

<%-- 
    Document   : studentSuccess
    Created on : 05.Ağu.2013, 05:18:16
    Author     : ahmet.boz
--%>

<%@page contentType="text/html" pageEncoding="UTF-8"%>
<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
 


 

Spring's form tags example

Name : ${student.name}
SurName : ${student.surName}
Lessons : []
Sex : ${student.sex}
Number : ${student.number}
Foreign Languages : ${student.foreignLanguages}

5. Spring Bean Configuration

Son olarak mesajlar.properties ve Controller'ımızı configurasyon dosyamıza kaydediyoruz.
 dispatcher-servlet.xml



    

    
    
        
            
                indexController
                student
            
        
    
    
    
 
 
 
 
 
  
 
  
 
  
  
 
  
  
    

    
    



Artık projemiz çalışır durumda. Tabi son olarak redirect.jsp içerisinde
<% response.sendRedirect("student.htm"); %> değişikliğini yapmayı unutmuyoruz, hazırladığımız sayfanın açılması için.



Spring MVC de dikkat etmeniz gereken en önemli şey isimlendirmleri doğru yerlerde kullanmanız arkadaşlar. Yardıma ihtiyaç duyduğunuz yerde iletişime geçebilirsiniz. Yorumlardan dönmeye çalışacağım. Kolay gelsin.

Hiç yorum yok :

Yorum Gönder