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;
- Spring 2.5
- JDK 1.6
- Netbeans 7.2
- Apache Tomcat 7.0
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.propertiesrequired.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