Twitter Youtube Github
Burak Kutbay'ın Kişisel Blog'u |

Type and hit Enter to search

  • Quarkus Dersleri
  • Spring Dersleri
    • Spring Cloud
    • Spring Boot
    • Spring Uygulama Örnekleri
    • Spring Core
    • Spring JDBC Template
    • Spring MVC
  • İleri Java Dersleri
    • Java Server Faces
    • Java Server Pages
    • PrimeFaces
    • Servlet
    • JDBC
    • JSTL
    • Java 8
  • Hibernate Dersleri
  • / Diğer
    • Ünlü Bilişimciler
    • C Sharp
    • Kütüphane
    • Makale
  • Hakkımda
Spring MVC

Spring MVC Form İşlemleri Form Validation @InitBinder Kullanımı

Paylaş

Spring MVC Dersleri‘ne devam ediyoruz.

Spring MVC ile arayüz işlemleri kullanarak form işlemlerinde doğabilecek hataları yönetme işleminin nasıl olduğunu inceleyeceğiz. Spring MVC ile yapacağımız projelerimizdeki entity beanlerimizdeki değişkenlerimize belirli kriter belirleyebiliriz.

Bir örnek ile açıklamaya çalışalım. Bir üye kayıt formu oluşturalım ve boş geçilemez olduğunu varsayarak valide etmeye çalışalım. Yazının sonunda bu projeyi Github sayfamdan indirebileceğiniz bağlantıyı bulabilirsiniz.

Projemiz bir maven projesi olacaktır. Bağımlılıklarımızı pom.xml imize ekleyelim.

 <dependencies>

        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-webmvc</artifactId>
            <version>4.3.7.RELEASE</version>
        </dependency>

        <dependency>
            <groupId>javax.servlet.jsp.jstl</groupId>
            <artifactId>javax.servlet.jsp.jstl-api</artifactId>
            <version>1.2.1</version>
        </dependency>
        <dependency>
            <groupId>taglibs</groupId>
            <artifactId>standard</artifactId>
            <version>1.1.2</version>
        </dependency>

        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>javax.servlet-api</artifactId>
            <version>3.1.0</version>
            <scope>provided</scope>
        </dependency>

        <dependency>
            <groupId>javax.servlet.jsp</groupId>
            <artifactId>javax.servlet.jsp-api</artifactId>
            <version>2.3.1</version>
            <scope>provided</scope>
        </dependency>
    </dependencies>

Bağımlılıklarımızı ekledik.

Modelimizi oluşturalım. Bu modelimizde üye bilgilerini tutacağız.

public class User {

    private String name;
    private String surname;
    private String email;

    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 getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }


    @Override
    public String toString() {
        return "User{" +
                "name='" + name + '\'' +
                ", surname='" + surname + '\'' +
                ", email='" + email + '\'' +
                '}';
    }
}

Modelimizi oluşturduk.

Şimdi yazımızın konusu olan valide etme işine girelim. Bir hata olduğunda vereceğimiz mesajları tutacağımız messeges.properties dosyası oluşturağız. bu dosya resources klasörünün içinde olmalı.

empty.name = Enter a valid name.
empty.surname = Enter a valid surname.
empty.email = Enter a valid empty.

Bu dosyanın içerisinde oluşturduğum format isteğinize göre değişebilir ama genellikle xxxx = bla bla şeklindedir. Beanlerimizden bu uyarılara xxx olarak erişeceğiz.

Şimdi User Validator isminde bir class oluşturalım ve hangi durumda hangi mesajın hangi değişkenimiz ile alakalı olduğunu belirtelim.

@Component
public class UserValidator implements Validator {


    public boolean supports(Class<?> aClass) {
        return User.class.equals(aClass);
    }

    public void validate(Object o, Errors errors) {

        ValidationUtils.rejectIfEmpty(errors, "name", "empty.name");
        ValidationUtils.rejectIfEmpty(errors, "surname", "empty.surname");
        ValidationUtils.rejectIfEmpty(errors, "email", "empty.email");

        User user = (User) o;

    }


}

User Validator classımızı Validator classını implement ettik. Validator classı org.springframework.validation paketi içerisindedir. Springin Validator özelliğinden faydalanacağız.

Validate classının Override etmemiz gereken iki adet metodu bulunmakta. Bunlar supports ve validate dir. Supports metodunda gelen class User classımız mı kontrol ediyoruz. User’den gelen bilgileri kontrol edeceğimiz için gelen doğru class mı ona bakmaktayız. Diğer metodumuz ise gelen hatalarda hangi değişkenimize gelirse ilgili hatanın gösterilmesini sağlayan metottur.

Kullanımı ise şu şekilde;

ValidationUtils.rejectIfEmpty(gelen_hata, "degisken", "hata_mesajı");

Gelecek olan hata ayrımlarını da bu sayede yapabilmekteyiz.

Şimdi User Controller’imizi oluşturalım.

@Controller
public class UserController {

    @Autowired
    private UserValidator userValidator;


    @InitBinder
    protected void initBinder(WebDataBinder binder) {
        binder.addValidators(userValidator);
    }

    @GetMapping("/")
    public String userForm(Locale locale, Model model) {
        model.addAttribute("user", new User());
        return "userForm";
    }

  
    @PostMapping("/saveUser")
    public String saveUser(@ModelAttribute("user") @Validated User user, BindingResult result,
                           Model model) {

        if (result.hasErrors()) {
            return "userForm";
        }
        return "success";
    }

}

Bu dersimizde kadar gördüğümüz Controller’dan farklı olan initBinder metodu ve anotasyonudur. Bu metod ve antasyon sayesinde kendi yaptığımız hata validasyonlarını kullanmamızı sağlamaktadır. Formumuzdan Post edeceğimiz metodumuzda User classımızın Validate işlemine bu metod üzerinden olması için @Validated anotasyonu kullanılmaktadır.

JSP Sayfalarımızı oluşturalım.

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
  pageEncoding="ISO-8859-1"%>
<%@taglib uri="http://www.springframework.org/tags/form" prefix="form"%>
<!DOCTYPE html>
<html>
<head>
<title>Burak KUTBAY</title>
</head>
<body>
<center>
  <form:form action="saveUser" method="post" modelAttribute="user">
    <table>
      <tr>
        <th>Name</th>
        <td>
          <form:input path="name" /> 
          <form:errors path="name"/>
         </td>
      </tr> <tr>
        <th>Surname</th>
        <td>
          <form:input path="surname" />
          <form:errors path="surname"/>
         </td>
      </tr>
      <tr>
        <th>Email</th>
        <td>
            <form:input path="email" /> 
            <form:errors path="email"/>
         </td>
      </tr>
    </table>
    <button type="submit">Submit</button>
  </form:form>
</center>
</body>
</html>

Ve validate işlemi geçtikten sonra oluşacak sonuç sayfamızı oluşturalım.

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
  pageEncoding="ISO-8859-1"%>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Burak KUTBAY</title>
</head>
<body>
  <table>
    <tr>
      <th>Name</th>
      <td>${user.name}</td>
    </tr>
    <tr>
  </table>
  <th>Surname</th>
  <td>${user.surname}</td>
  </tr>
  <tr>
    <th>Email</th>
    <td>${user.email}</td>
  </tr>
</body>
</html>

Web Config classımızı oluşturalım.

@Configuration
@EnableWebMvc
@ComponentScan(basePackages = { "com.burakkutbay.controller",
      "com.burakkutbay.validator" })
public class WebConfig extends WebMvcConfigurerAdapter{

   @Bean
   public InternalResourceViewResolver resolver() {
      InternalResourceViewResolver resolver = new InternalResourceViewResolver();
      resolver.setViewClass(JstlView.class);
      resolver.setPrefix("/WEB-INF/views/");
      resolver.setSuffix(".jsp");
      return resolver;
   }

   @Bean
   public MessageSource messageSource() {
      ResourceBundleMessageSource source = new ResourceBundleMessageSource();
      source.setBasename("messages");
      return source;
   }
}

Uygulamamızı ayağa kaldıracak Java classımızı oluşturalımç

package com.burakkutbay.config;

import org.springframework.web.servlet.support.AbstractAnnotationConfigDispatcherServletInitializer;


public class App extends AbstractAnnotationConfigDispatcherServletInitializer {

   @Override
   protected Class<?>[] getRootConfigClasses() {
      return new Class[] {};
   }

   @Override
   protected Class<?>[] getServletConfigClasses() {
      return new Class[] { WebConfig.class };
   }

   @Override
   protected String[] getServletMappings() {
      return new String[] { "/" };
   }
}

Ve çalıştıralım. Sonuç olarak submit butonuna basalım.

Spring hatayı yakaladı ve bizim oluşturduğumuz hata mesajı gözüktü.


Projenin Kaynak Kodlarını Github Üzerinden Görünlüte / İndir 

Önceki Ders: Form İşlemleri ModelAttribute Kullanımı Spring MVC Dersleri Sonraki Ders:

 

Tags:

initbinder nedirSpring MVC Dersleri uygulama örneğiSpring MVC Örneğispring validation

Paylaş

Diğer Yazılar

blank
Previous

Spring MVC Form İşlemleri ModelAttribute Kullanımı

blank
Next

Design Pattern – Factory Pattern Nedir?

Next
blank
13 Şubat 2018

Design Pattern – Factory Pattern Nedir?

Previews
25 Ocak 2018

Spring MVC Form İşlemleri ModelAttribute Kullanımı

blank

No Comment! Be the first one.

Bir cevap yazın Cevabı iptal et

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

İlgini Çekebilir

Spring Dersleri

Spring MVC @PathVariable Kullanımı

Spring Dersleri

Spring MVC Dersleri – Merhaba Dünya Örneği

Spring Dersleri

Spring MVC Dersleri – Spring MVC Nedir?

Burak Kutbay'ın Kişisel Blog'u |

© 2008 - ∞, Her hakkı saklıdır.

Link

  • Hakkımda
  • İletişim
  • Arşiv

Kategori

Röportaj
Struts
Android
Vue.js
Node.js
Redis
XCode
Spring Data
Debezium
Mikroservis Mimarisi
Spring Native
Video
Spring Security
Objective C
iPhone Uygulama Geliştirme
JPA
DevOps
PostgreSQL
Apache Kafka
Git
Design Patterns
Yaptığım Projeler
Servlet
Maven
Spring Cloud
Linux
Spring
JDBC
PrimeFaces
Spring Jdbc Template
RabbitMQ
Google
Manset
Spring MVC
OCA Java SE 8
Quarkus
Spring Core
Microsoft
Veritabanı
Tanıyalım
Java SE
Hibernate
Teknoloji
Okuduğum Kitaplar
Java Server Faces
Yazılım Mühendisliği
C Sharp
Spring Boot
Java
Günlüğüm
Java Server Page
Makale

Takip Et

Twitter Youtube Github