Spring MVC তে Form Validation করতে Hibernate Validator এবং JSR-303/JSR-380 এর ব্যবহার একটি শক্তিশালী এবং সুবিধাজনক পদ্ধতি। Hibernate Validator হল JSR-303 এবং JSR-380 এর একটি রেফারেন্স ইমপ্লিমেন্টেশন যা অ্যানোটেশন ভিত্তিক ভ্যালিডেশন সরবরাহ করে। JSR-303 হল Bean Validation API, এবং JSR-380 হল Bean Validation API এর আপডেট সংস্করণ।
এখানে আমরা দেখব কিভাবে Hibernate Validator এবং JSR-303/JSR-380 ব্যবহার করে Spring MVC অ্যাপ্লিকেশনে Form Validation করা যায়।
Step 1: Maven Dependency
প্রথমে, আপনার pom.xml ফাইলে Hibernate Validator এবং Bean Validation API এর জন্য ডিপেন্ডেন্সি যোগ করুন:
<dependencies>
<!-- Spring Boot Starter Web for Spring MVC -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- Hibernate Validator (JSR-303 and JSR-380) -->
<dependency>
<groupId>org.hibernate.validator</groupId>
<artifactId>hibernate-validator</artifactId>
<version>6.1.0.Final</version> <!-- use the latest version -->
</dependency>
<!-- For Bean Validation API -->
<dependency>
<groupId>javax.validation</groupId>
<artifactId>validation-api</artifactId>
<version>2.0.1.Final</version> <!-- use the latest version -->
</dependency>
</dependencies>
Step 2: Model Class with Validation Annotations
Spring MVC তে ফর্ম ভ্যালিডেশন করতে, মডেল ক্লাসে বিভিন্ন ভ্যালিডেশন অ্যানোটেশন যোগ করতে হবে। Hibernate Validator JSR-303/JSR-380 এর অ্যানোটেশন ব্যবহার করে ফিল্ডগুলো ভ্যালিডেট করা যাবে।
package com.example.model;
import javax.validation.constraints.NotEmpty;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;
import javax.validation.constraints.Min;
public class User {
@NotNull(message = "Name cannot be null")
@Size(min = 2, max = 30, message = "Name should have at least 2 characters")
private String name;
@NotNull(message = "Age cannot be null")
@Min(value = 18, message = "Age should be greater than or equal to 18")
private Integer age;
@NotEmpty(message = "Email cannot be empty")
private String email;
// Getters and Setters
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
}
Explanation of Annotations:
@NotNull: ফিল্ডটিnullহতে পারবে না।@Size(min, max): একটি স্ট্রিং ফিল্ডের জন্য দৈর্ঘ্য সীমা নির্ধারণ করে।@Min(value): একটি ইনটিজার ফিল্ডের জন্য ন্যূনতম মান নির্ধারণ করে।@NotEmpty: একটি স্ট্রিং ফিল্ডে খালি মান গ্রহণ করা যাবে না।
Step 3: Controller with Form Validation
এখন একটি কন্ট্রোলার তৈরি করুন যেখানে ব্যবহারকারী ফর্ম সাবমিট করবে এবং @Valid অ্যানোটেশন ব্যবহার করে ভ্যালিডেশন করা হবে।
package com.example.controller;
import com.example.model.User;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.validation.BindingResult;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import javax.validation.Valid;
@Controller
public class UserController {
// Display the form
@GetMapping("/user")
public String showForm(User user) {
return "userForm";
}
// Process the form
@PostMapping("/user")
public String submitForm(@Valid User user, BindingResult bindingResult, Model model) {
if (bindingResult.hasErrors()) {
return "userForm"; // If validation fails, show the form again with error messages
}
model.addAttribute("message", "User details submitted successfully!");
return "userResult"; // Return a success view
}
}
Explanation:
@Valid: এটি Spring এর একটি অ্যানোটেশন যা ফর্ম বাউন্ড অবজেক্ট (এখানেUserক্লাস) ভ্যালিডেট করার জন্য ব্যবহৃত হয়।BindingResult: এটি রেসপন্স অবজেক্ট যা ফর্মের ভ্যালিডেশন ফলাফল ধারণ করে। যদি কোনো ভ্যালিডেশন ত্রুটি থাকে, তবেbindingResult.hasErrors()চেক করা হয়।Model: মডেল ব্যবহার করে আমরা একটি মেসেজ অথবা অন্য ডেটা ভিউতে পাঠাতে পারি।
Step 4: Create the Form (userForm.jsp)
এখন একটি JSP ফাইল তৈরি করুন যেখানে ব্যবহারকারী ইনপুট দিবে।
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<html>
<head>
<title>User Form</title>
</head>
<body>
<h2>User Form</h2>
<form action="/user" method="post">
<label>Name: </label>
<input type="text" name="name" value="${user.name}"/>
<c:if test="${not empty param.name}">
<div style="color:red">${param.name}</div>
</c:if><br/>
<label>Age: </label>
<input type="number" name="age" value="${user.age}"/><br/>
<label>Email: </label>
<input type="text" name="email" value="${user.email}"/><br/>
<button type="submit">Submit</button>
</form>
<c:if test="${not empty message}">
<div style="color:green">${message}</div>
</c:if>
</body>
</html>
Explanation:
- JSP Form: ফর্মের ইনপুট ক্ষেত্রের জন্য
name,age, এবংemailফিল্ড আছে। - Validation Feedback: আপনি ব্যবহারকারীকে সঠিক ত্রুটির বার্তা প্রদর্শন করতে পারেন যদি ভ্যালিডেশন ব্যর্থ হয়।
Step 5: Display Validation Errors in the View
এখন userResult.jsp তৈরি করুন যা সফলভাবে ফর্ম সাবমিট করার পর ব্যবহারকারীকে প্রদর্শন করবে।
<html>
<head>
<title>Form Submission Result</title>
</head>
<body>
<h2>${message}</h2>
</body>
</html>
Step 6: Configure Spring MVC
web.xml কনফিগার করুন (যদি আপনি পুরানো Spring MVC প্রজেক্ট ব্যবহার করেন) বা Spring Boot এর জন্য প্রয়োজনীয় কনফিগারেশন নিশ্চিত করুন।
web.xml Configuration (for traditional Spring MVC project)
<web-app xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
version="3.0">
<servlet>
<servlet-name>dispatcher</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>dispatcher</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
</web-app>
Conclusion
Hibernate Validator এবং JSR-303/JSR-380 ব্যবহার করে Spring MVC তে ফর্ম ভ্যালিডেশন একটি খুব সহজ এবং শক্তিশালী পদ্ধতি। আপনি @NotNull, @Size, @Min, @NotEmpty ইত্যাদি অ্যানোটেশন ব্যবহার করে ফিল্ড ভ্যালিডেশন করতে পারেন। Spring MVC তে @Valid অ্যানোটেশন এবং BindingResult ব্যবহার করে ফর্মের ভ্যালিডেশন ফলাফল চেক করা হয় এবং ত্রুটি থাকলে তা ব্যবহারকারীকে প্রদর্শন করা হয়।
Read more