Spring MVC - Hata İşleme Örneği

Aşağıdaki örnek, Spring Web MVC Framework kullanılarak formlarda Hata İşleme ve Doğrulayıcıların nasıl kullanılacağını gösterir. Başlangıç ​​olarak, çalışan bir Eclipse IDE'ye sahip olalım ve Spring Web Framework kullanarak Dinamik Form tabanlı bir Web Uygulaması geliştirmek için aşağıdaki adımları göz önünde bulunduralım.

Adım Açıklama
1 Spring MVC - Hello World bölümünde açıklandığı gibi com.tutorialspoint paketinin altında HelloWeb adıyla bir proje oluşturun.
2 Com.tutorialspoint paketi altında Student, StudentController ve StudentValidator Java sınıfları oluşturun.
3 Jsp alt klasörü altında addStudent.jsp, result.jsp görünüm dosyaları oluşturun.
4 Son adım, kaynak ve yapılandırma dosyalarının içeriğini oluşturmak ve uygulamayı aşağıda açıklandığı gibi dışa aktarmaktır.

Student.java

package com.tutorialspoint;

public class Student {
   private Integer age;
   private String name;
   private Integer id;

   public void setAge(Integer age) {
      this.age = age;
   }
   public Integer getAge() {
      return age;
   }

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

   public void setId(Integer id) {
      this.id = id;
   }
   public Integer getId() {
      return id;
   }
}

StudentValidator.java

package com.tutorialspoint;

import org.springframework.validation.Errors;
import org.springframework.validation.ValidationUtils;
import org.springframework.validation.Validator;

public class StudentValidator implements Validator {

   @Override
   public boolean supports(Class<?> clazz) {
      return Student.class.isAssignableFrom(clazz);
   }

   @Override
   public void validate(Object target, Errors errors) {		
      ValidationUtils.rejectIfEmptyOrWhitespace(errors, 
         "name", "required.name","Field name is required.");
   }
}

StudentController.java

package com.tutorialspoint;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.validation.BindingResult;
import org.springframework.validation.Validator;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.WebDataBinder;
import org.springframework.web.bind.annotation.InitBinder;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.servlet.ModelAndView;

@Controller
public class StudentController {

   @Autowired
   @Qualifier("studentValidator")
   private Validator validator;

   @InitBinder
   private void initBinder(WebDataBinder binder) {
      binder.setValidator(validator);
   }

   @RequestMapping(value = "/addStudent", method = RequestMethod.GET)
   public ModelAndView student() {
      return new ModelAndView("addStudent", "command", new Student());
   }

   @ModelAttribute("student")
   public Student createStudentModel() {	
      return new Student();
   }

   @RequestMapping(value = "/addStudent", method = RequestMethod.POST)
   public String addStudent(@ModelAttribute("student") @Validated Student student, 
      BindingResult bindingResult, Model model) {

      if (bindingResult.hasErrors()) {
         return "addStudent";
      }
      model.addAttribute("name", student.getName());
      model.addAttribute("age", student.getAge());
      model.addAttribute("id", student.getId());

      return "result";
   }
}

HelloWeb-servlet.xml

<beans xmlns = "http://www.springframework.org/schema/beans"
   xmlns:context = "http://www.springframework.org/schema/context"
   xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance"
   xsi:schemaLocation = "
   http://www.springframework.org/schema/beans     
   http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
   http://www.springframework.org/schema/context 
   http://www.springframework.org/schema/context/spring-context-3.0.xsd">

   <context:component-scan base-package = "com.tutorialspoint" />

   <bean class = "org.springframework.web.servlet.view.InternalResourceViewResolver">
      <property name = "prefix" value = "/WEB-INF/jsp/" />
      <property name = "suffix" value = ".jsp" />
   </bean>
 
   <bean id = "studentValidator" class = "com.tutorialspoint.StudentValidator" />
</beans>

Burada ilk servis yöntemi için student(), JSP dosyanızda <form: form> etiketleri kullanıyorsanız, yay çerçevesi "command" adında bir nesne beklediğinden, ModelAndView nesnesine "command" adında boş bir Studentobject geçtik. Öyleyse, student () yöntemi çağrıldığında,addStudent.jsp görünüm.

İkinci hizmet yöntemi addStudent() bir POST yöntemine karşı çağrılacak HelloWeb/addStudentURL. Model nesnenizi gönderilen bilgilere göre hazırlayacaksınız. Son olarak, servis yönteminden bir "sonuç" görünümü döndürülecek ve sonuç.jsp'nin oluşturulmasına neden olacaktır. Doğrulayıcı kullanılarak üretilen hataların olması durumunda aynı görünüm "addStudent" döndürülür, Spring otomatik olarak hata mesajlarını şuradan enjekte eder:BindingResult görünümünde.

addStudent.jsp

<%@taglib uri = "http://www.springframework.org/tags/form" prefix = "form"%>
<html>
   <head>
      <title>Spring MVC Form Handling</title>
   </head>
   <style>
      .error {
         color: #ff0000;
      }

      .errorblock {
         color: #000;
         background-color: #ffEEEE;
         border: 3px solid #ff0000;
         padding: 8px;
         margin: 16px;
      }
   </style>
   
   <body>
      <h2>Student Information</h2>
      <form:form method = "POST" action = "/HelloWeb/addStudent" commandName = "student">
      <form:errors path = "*" cssClass = "errorblock" element = "div" />
         <table>
            <tr>
               <td><form:label path = "name">Name</form:label></td>
               <td><form:input path = "name" /></td>
               <td><form:errors path = "name" cssClass = "error" /></td>
            </tr>
            <tr>
               <td><form:label path = "age">Age</form:label></td>
               <td><form:input path = "age" /></td>
            </tr>
            <tr>
               <td><form:label path = "id">id</form:label></td>
               <td><form:input path = "id" /></td>
            </tr>
            <tr>
               <td colspan = "2">
               <input type = "submit" value = "Submit"/>
               </td>
            </tr>
         </table>  
      </form:form>
   </body>
</html>

Burada kullanıyoruz <form:errors />hata mesajlarını oluşturmak için path = "*" etiketi. Örneğin

<form:errors path = "*" cssClass = "errorblock" element = "div" />

Tüm giriş doğrulamaları için hata mesajlarını oluşturacaktır.

Kullanıyoruz <form:errors />ad alanı için hata mesajı oluşturmak için yol = "ad" içeren etiket. Örneğin

<form:errors path = "name" cssClass = "error" />

Ad alanı doğrulamaları için hata mesajları verecektir.

sonuç.jsp

<%@taglib uri = "http://www.springframework.org/tags/form" prefix = "form"%>
<html>
   <head>
      <title>Spring MVC Form Handling</title>
   </head>
   <body>

      <h2>Submitted Student Information</h2>
      <table>
         <tr>
            <td>Name</td>
            <td>${name}</td>
         </tr>
         <tr>
            <td>Age</td>
            <td>${age}</td>
         </tr>
         <tr>
           <td>ID</td>
           <td>${id}</td>
         </tr>
      </table>  
   </body>
</html>

Kaynak ve yapılandırma dosyalarını oluşturmayı tamamladığınızda, uygulamanızı dışa aktarın. Uygulamanıza sağ tıklayın, kullanınExport → WAR File seçeneğini belirleyin ve kaydedin HelloWeb.war Tomcat'in webapps klasöründeki dosya.

Şimdi, Tomcat sunucunuzu başlatın ve diğer web sayfalarına standart bir tarayıcı kullanarak webapps klasöründen erişebildiğinizden emin olun. Bir URL deneyin -http://localhost:8080/HelloWeb/addStudent Spring Web Uygulaması ile her şey yolundaysa aşağıdaki ekranı göreceğiz.

Gerekli bilgileri gönderdikten sonra, formu göndermek için gönder düğmesine tıklayın. Spring Web Uygulaması ile her şey yolundaysa aşağıdaki ekranı görmelisiniz.