Form Handling এবং Validation

স্প্রিং এমভিসি (Spring MVC) - Java Technologies

305

Spring MVC ওয়েব অ্যাপ্লিকেশন ডেভেলপমেন্টে ফর্ম হ্যান্ডলিং এবং ডেটা ভ্যালিডেশন অত্যন্ত গুরুত্বপূর্ণ। Spring MVC এর মাধ্যমে সহজে HTML ফর্ম ডেটা গ্রহণ, প্রক্রিয়া করা এবং ব্যবহারকারীর ইনপুটের জন্য ভ্যালিডেশন প্রয়োগ করা যায়। এখানে আমরা আলোচনা করবো কিভাবে Spring MVC তে ফর্ম হ্যান্ডলিং এবং ভ্যালিডেশন পরিচালনা করা যায়।


1. Spring MVC তে Form Handling

Spring MVC তে ফর্ম ডেটা প্রক্রিয়া করার জন্য কিছু সাধারণ পদক্ষেপ রয়েছে:

  • Form Object তৈরি করা।
  • Model Attribute হিসেবে ফর্ম ডেটা পাঠানো।
  • Form Handling Method তৈরি করা।
  • JSP বা HTML ফর্ম তৈরি করা।

Step 1: Model Object তৈরি করা (Form Object)

প্রথমে একটি POJO ক্লাস (Plain Old Java Object) তৈরি করতে হবে, যা ফর্ম ডেটা ধারণ করবে। এই ক্লাসটি সাধারণত প্রোপার্টি, গেটারস এবং সেটারস নিয়ে গঠিত।

public class User {
    private String username;
    private String email;
    private String password;

    // Getters and Setters
    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public String getEmail() {
        return email;
    }

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

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }
}

এখানে, User ক্লাস ফর্মের ডেটা ধারণ করবে, যেমন username, email, এবং password

Step 2: Controller Method তৈরি করা

Spring MVC কন্ট্রোলার মেথডে @ModelAttribute অ্যানোটেশন ব্যবহার করে ফর্ম ডেটা গ্রহন করা হয়।

@Controller
public class UserController {

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

    @PostMapping("/submitForm")
    public String submitForm(@ModelAttribute("user") User user) {
        // Save user details to database or further processing
        return "success";
    }
}

এখানে:

  • @ModelAttribute("user"): এটি কন্ট্রোলার মেথডের আর্গুমেন্ট হিসেবে ফর্ম ডেটা পাঠাবে।
  • @GetMapping("/register"): ফর্ম প্রদর্শনের জন্য GET রিকোয়েস্ট।
  • @PostMapping("/submitForm"): ফর্ম সাবমিট করার জন্য POST রিকোয়েস্ট।

Step 3: JSP ফর্ম তৈরি করা

Spring MVC তে ফর্মের জন্য সাধারণত JSP ফাইল ব্যবহার করা হয়। এখানে একটি উদাহরণ দেওয়া হলো:

<!-- /WEB-INF/views/register.jsp -->
<html>
<head>
    <title>User Registration</title>
</head>
<body>
    <h2>Register</h2>
    <form action="/submitForm" method="post">
        <label for="username">Username:</label>
        <input type="text" id="username" name="username" value="${user.username}"><br><br>

        <label for="email">Email:</label>
        <input type="text" id="email" name="email" value="${user.email}"><br><br>

        <label for="password">Password:</label>
        <input type="password" id="password" name="password" value="${user.password}"><br><br>

        <button type="submit">Submit</button>
    </form>
</body>
</html>

এখানে, ${user.username}, ${user.email}, এবং ${user.password} ভিউতে ডেটা বাইন্ডিং করে ফর্মের ইনপুট ফিল্ডে প্রদর্শন করা হচ্ছে।


2. Spring MVC তে Form Validation

Spring MVC তে ফর্ম ভ্যালিডেশন করতে Javax Validation API ব্যবহার করা হয়, যা স্প্রিং ফ্রেমওয়ার্কের সাথে ইন্টিগ্রেটেড। এই বৈশিষ্ট্যটি @Valid বা @Validated অ্যানোটেশন এবং BindingResult সহ ব্যবহার করা যায়।

Step 1: Validation Annotations ব্যবহার করা

Spring MVC তে ফর্ম ভ্যালিডেশন করার জন্য প্রথমে Javax Validation অ্যানোটেশনগুলি ব্যবহার করতে হয়।

import javax.validation.constraints.NotEmpty;
import javax.validation.constraints.Email;

public class User {

    @NotEmpty(message = "Username is required")
    private String username;

    @NotEmpty(message = "Email is required")
    @Email(message = "Invalid email address")
    private String email;

    @NotEmpty(message = "Password is required")
    private String password;

    // Getters and Setters
}

এখানে:

  • @NotEmpty: এটি ফিল্ডের মান ফাঁকা (empty) না হওয়ার জন্য চেক করে।
  • @Email: এটি ইমেল ফিল্ডের মানের ফর্ম্যাট চেক করে।

Step 2: Controller Method তে Validation প্রয়োগ করা

Spring MVC কন্ট্রোলার মেথডে @Valid অ্যানোটেশন ব্যবহার করা হয় যাতে ফর্ম ডেটা ভ্যালিডেট করা হয়। যদি কোনো ভুল থাকে, তবে BindingResult দ্বারা এর রেজাল্ট চেক করা যায়।

@Controller
public class UserController {

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

    @PostMapping("/submitForm")
    public String submitForm(@Valid @ModelAttribute("user") User user, BindingResult result) {
        if (result.hasErrors()) {
            return "register";  // যদি ভ্যালিডেশন ত্রুটি থাকে, ফর্ম পুনরায় দেখানো হবে
        }
        // ফর্ম সফলভাবে সাবমিট হলে ডেটা প্রসেস করা হবে
        return "success";
    }
}

এখানে:

  • @Valid: এটি User অবজেক্টের উপর ভ্যালিডেশন প্রয়োগ করে।
  • BindingResult: এটি ফর্ম ভ্যালিডেশন চেক করে এবং কোনো ত্রুটি থাকলে সেগুলো result.hasErrors() দিয়ে চেক করা হয়।

Step 3: JSP ফর্মে ত্রুটি দেখানো

Spring MVC তে ফর্ম ভ্যালিডেশনের ত্রুটিগুলি JSP তে প্রদর্শন করা হয়। এখানে একটি উদাহরণ:

<!-- /WEB-INF/views/register.jsp -->
<html>
<head>
    <title>User Registration</title>
</head>
<body>
    <h2>Register</h2>
    <form action="/submitForm" method="post">
        <label for="username">Username:</label>
        <input type="text" id="username" name="username" value="${user.username}">
        <c:if test="${not empty errors['username']}">
            <span style="color:red">${errors['username']}</span>
        </c:if><br><br>

        <label for="email">Email:</label>
        <input type="text" id="email" name="email" value="${user.email}">
        <c:if test="${not empty errors['email']}">
            <span style="color:red">${errors['email']}</span>
        </c:if><br><br>

        <label for="password">Password:</label>
        <input type="password" id="password" name="password" value="${user.password}">
        <c:if test="${not empty errors['password']}">
            <span style="color:red">${errors['password']}</span>
        </c:if><br><br>

        <button type="submit">Submit</button>
    </form>
</body>
</html>

এখানে <c:if> ট্যাগ ব্যবহার করে ভ্যালিডেশন ত্রুটি প্রদর্শন করা হচ্ছে।


3. Conclusion

Spring MVC তে ফর্ম হ্যান্ডলিং এবং ভ্যালিডেশন ব্যবস্থাপনা খুবই শক্তিশালী এবং নমনীয়। আপনি সহজে ফর্ম ডেটা গ্রহণ, প্রক্রিয়া করা এবং ভ্যালিডেশন প্রয়োগ করতে পারেন। @Valid এবং BindingResult এর মাধ্যমে আপনি ব্যবহারকারীর ইনপুট চেক করতে পারেন এবং ত্রুটিগুলি ব্যবহারকারীকে প্রদর্শন করতে পারেন। Spring MVC এর এই বৈশিষ্ট্যগুলি ওয়েব অ্যাপ্লিকেশন ডেভেলপমেন্টে কার্যকরভাবে কাজ করতে সাহায্য করে।

Content added By

Spring MVC তে HTML ফর্ম ব্যবহার করে ডেটা সার্ভারে পাঠানো এবং তারপর সেটি প্রসেস করা একটি সাধারণ প্রক্রিয়া। ফর্মের মাধ্যমে পঠানো ডেটা সাধারণত HTTP POST রিকোয়েস্ট হিসেবে পাঠানো হয়, এবং Spring MVC কন্ট্রোলার সেই ডেটা প্রসেস করে প্রয়োজনীয় পদক্ষেপ নেয়।

এখানে আমরা HTML ফর্ম তৈরি, ডেটা Spring MVC কন্ট্রোলারে প্রক্রিয়া করা এবং সার্ভার থেকে ক্লায়েন্টে প্রতিক্রিয়া ফেরত দেওয়ার উদাহরণ দেখব।


ধাপ ১: HTML ফর্ম তৈরি করা

প্রথমে একটি HTML ফর্ম তৈরি করতে হবে যা ব্যবহারকারীর ইনপুট নেয়। এই ফর্মটি সাধারণত GET বা POST HTTP মেথড ব্যবহার করে ডেটা সার্ভারে পাঠায়।

form.html (এটি src/main/resources/static/ ফোল্ডারে রাখতে হবে)

<!DOCTYPE html>
<html>
<head>
    <title>Spring MVC Form Example</title>
</head>
<body>
    <h2>Enter Your Details</h2>
    <form action="/submit" method="POST">
        <label for="name">Name:</label>
        <input type="text" id="name" name="name" required>
        <br><br>
        <label for="email">Email:</label>
        <input type="email" id="email" name="email" required>
        <br><br>
        <button type="submit">Submit</button>
    </form>
</body>
</html>

এখানে:

  • action="/submit": ফর্মের ডেটা /submit URL এ পাঠানো হবে।
  • method="POST": HTTP POST মেথডের মাধ্যমে ডেটা পাঠানো হবে।
  • name এবং email: ইউজারের ইনপুট ফিল্ড, যা সার্ভারে পাঠানো হবে।

ধাপ ২: Spring MVC কন্ট্রোলার তৈরি করা

Spring MVC কন্ট্রোলার তৈরি করে HTML ফর্ম থেকে পাঠানো ডেটা প্রসেস করা যায়। এখানে আমরা @RequestMapping বা @PostMapping অ্যানোটেশন ব্যবহার করে রিকোয়েস্ট হ্যান্ডলিং করবো।

FormController.java

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.ui.Model;

@Controller
public class FormController {

    // Display the form when accessing /form URL
    @GetMapping("/form")
    public String showForm() {
        return "form"; // Return the view name (form.html)
    }

    // Handle the form submission
    @PostMapping("/submit")
    public String submitForm(@RequestParam("name") String name, 
                             @RequestParam("email") String email, 
                             Model model) {
        // Process the data (e.g., saving it to the database or using it in the application)
        model.addAttribute("name", name);
        model.addAttribute("email", email);

        // Send a success message back to the user
        return "result"; // Return the view name (result.html)
    }
}

এখানে:

  • @GetMapping("/form"): /form URL এ গেলে ফর্ম প্রদর্শিত হবে।
  • @PostMapping("/submit"): ফর্ম সাবমিট করার পর, ডেটা /submit URL এ POST করা হবে। এখানে @RequestParam ব্যবহার করে ফর্মের ইনপুটগুলি ক্লিয়ার করা হয়েছে।

ধাপ ৩: Result Page তৈরি করা

এখন, ডেটা প্রক্রিয়া হওয়ার পরে ব্যবহারকারীকে একটি সফল পৃষ্ঠা দেখানোর জন্য একটি result.html তৈরি করা হবে।

result.html (এটি src/main/resources/templates/ ফোল্ডারে রাখতে হবে)

<!DOCTYPE html>
<html>
<head>
    <title>Form Submission Result</title>
</head>
<body>
    <h2>Form Submission Successful!</h2>
    <p>Name: <span th:text="${name}"></span></p>
    <p>Email: <span th:text="${email}"></span></p>
</body>
</html>

এখানে:

  • th:text="${name}" এবং th:text="${email}": Spring MVC এর Thymeleaf টেমপ্লেট ইঞ্জিন ব্যবহার করে মডেল থেকে প্রাপ্ত ডেটা ভিউতে প্রদর্শিত হয়।

ধাপ ৪: Spring Boot Main Application Class

Spring Boot অ্যাপ্লিকেশন চালানোর জন্য একটি main ক্লাস তৈরি করুন।

SpringMvcApplication.java

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class SpringMvcApplication {

    public static void main(String[] args) {
        SpringApplication.run(SpringMvcApplication.class, args);
    }
}

এটি Spring Boot অ্যাপ্লিকেশন চালু করবে।


ধাপ ৫: প্রজেক্ট রান করা

Spring Boot অ্যাপ্লিকেশন রান করতে নিচের কমান্ড ব্যবহার করুন:

mvn spring-boot:run

এটি অ্যাপ্লিকেশন শুরু করবে এবং আপনি http://localhost:8080/form URL তে গিয়ে ফর্ম দেখতে পারবেন।


ধাপ ৬: ফর্ম ব্যবহার করে ডেটা পাঠানো

  1. আপনার ব্রাউজারে http://localhost:8080/form URL এ যান।
  2. ফর্মে আপনার নাম এবং ইমেইল প্রবেশ করুন।
  3. ফর্ম সাবমিট করার পরে, /submit URL এ ডেটা পাঠানো হবে এবং Spring MVC কন্ট্রোলার ডেটা প্রসেস করে একটি result.html পৃষ্ঠা প্রদর্শন করবে, যেখানে আপনি আপনার ইনপুট করা ডেটা দেখতে পাবেন।

উপসংহার

Spring MVC তে HTML ফর্মের মাধ্যমে ডেটা পাঠানো এবং প্রসেস করা একটি মৌলিক কিন্তু অত্যন্ত গুরুত্বপূর্ণ ফিচার। এই প্রক্রিয়াটি সহজেই ক্লায়েন্ট-সার্ভার ইন্টারঅ্যাকশন তৈরি করতে সাহায্য করে। Spring MVC কন্ট্রোলার ব্যবহার করে ফর্মের ডেটা গ্রহণ, প্রক্রিয়া এবং ভিউতে উপস্থাপন করা যায়। Spring Boot এর সাথে এই কার্যপ্রণালীটি খুবই সহজ এবং দ্রুত প্রয়োগ করা যায়।

Content added By

@ModelAttribute একটি গুরুত্বপূর্ণ অ্যানোটেশন যা Spring MVC তে মডেল অবজেক্ট (Model Objects) থেকে ডেটা পাবার জন্য এবং ফর্ম ডেটা মডেল অবজেক্টে বেঁধে (bind) দেওয়ার জন্য ব্যবহৃত হয়। এটি সাধারণত ফর্ম ডেটা গ্রহণ করার জন্য ব্যবহার করা হয় এবং সেই ডেটা কন্ট্রোলার মেথডে পাঠানো হয়।

@ModelAttribute অ্যানোটেশনটি Controller ক্লাসে মডেল অবজেক্ট (POJO) এর জন্য বা মেথড প্যারামিটার হিসেবে ব্যবহৃত হয় এবং এটিকে বিভিন্নভাবে ব্যবহার করা যেতে পারে।


@ModelAttribute এর বিভিন্ন ব্যবহার

১. ফর্ম ডেটা মডেল অবজেক্টে বেঁধে দেওয়া (Binding form data to model object)

এটি সবচেয়ে সাধারণ ব্যবহার, যেখানে ফর্ম ডেটা সরাসরি মডেল অবজেক্টে bind করা হয়।

উদাহরণ:

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.PostMapping;

@Controller
public class UserController {

    // This method initializes the model with a new User object.
    @ModelAttribute("user")
    public User setUpForm() {
        return new User(); // Empty User object, can be filled with form data
    }

    @GetMapping("/userForm")
    public String showForm() {
        return "userForm"; // Returns the view name (userForm.jsp or Thymeleaf template)
    }

    @PostMapping("/submitForm")
    public String submitForm(@ModelAttribute User user) {
        // Do something with the User object (e.g., save it)
        System.out.println("User: " + user.getUsername() + ", " + user.getAge());
        return "formSuccess";
    }
}

userForm.jsp (view):

<form action="/submitForm" method="post">
    <label for="username">Username:</label>
    <input type="text" id="username" name="username" value="${user.username}">

    <label for="age">Age:</label>
    <input type="number" id="age" name="age" value="${user.age}">

    <button type="submit">Submit</button>
</form>

ব্যাখ্যা:

  • @ModelAttribute("user"): এটি একটি User অবজেক্ট তৈরি করে এবং এটি user নামে মডেলে যোগ করা হয়। যখন ফর্ম সাবমিট করা হয়, ফর্ম ডেটা এই অবজেক্টে bind হয়ে যাবে।
  • @ModelAttribute User user: এখানে User অবজেক্ট ফর্মের ডেটা থেকে স্বয়ংক্রিয়ভাবে পূর্ণ হবে।

২. @ModelAttribute ব্যবহার করে মডেল ডেটা যোগ করা

@ModelAttribute মেথড লেভেলে ব্যবহার করলে, এটি একটি মডেল অবজেক্ট ইনিশিয়ালাইজ করতে সহায়তা করে, যা আপনার ভিউতে উপলব্ধ থাকবে।

উদাহরণ:

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.ModelAttribute;

@Controller
public class UserController {

    @ModelAttribute("user")
    public User setUpForm() {
        return new User("John", 30); // Initializes a User object with predefined values
    }

    @GetMapping("/userPage")
    public String showPage() {
        return "userPage"; // Returns the view name (userPage.jsp or Thymeleaf template)
    }
}

userPage.jsp (view):

<h1>User Information</h1>
<p>Username: ${user.username}</p>
<p>Age: ${user.age}</p>

ব্যাখ্যা:

  • @ModelAttribute("user"): মেথডটি কন্ট্রোলার লেভেলে user মডেল অবজেক্ট প্রদান করে, যা ভিউতে ব্যবহৃত হতে পারে।
  • @ModelAttribute দ্বারা ফর্ম বা ডেটা না থাকলেও আপনি একটি প্রাথমিক মান দিয়ে মডেল অবজেক্ট তৈরি করতে পারেন।

৩. @ModelAttribute ব্যবহার করে কাস্টম মডেল ডেটা ইনিশিয়ালাইজেশন

@ModelAttribute এর সাহায্যে, আপনি ভিউ-সুনির্দিষ্ট ডেটা বা গ্লোবাল ডেটা ইনিশিয়ালাইজ করতে পারেন যা প্রতিটি রিকোয়েস্টে সঠিকভাবে ম্যাপ হয়।

উদাহরণ:

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.ModelAttribute;

@Controller
public class AdminController {

    // This method adds a global attribute to every view
    @ModelAttribute("admin")
    public String setUpAdmin() {
        return "Admin User";
    }

    @GetMapping("/dashboard")
    public String showDashboard() {
        return "dashboard";
    }
}

dashboard.jsp (view):

<h1>Welcome ${admin}</h1>

ব্যাখ্যা:

  • @ModelAttribute("admin"): এখানে কন্ট্রোলার মেথডে একটি গ্লোবাল প্যারামিটার admin যুক্ত করা হয়েছে যা প্রতিটি ভিউতে অ্যাক্সেস করা যাবে।

৪. @ModelAttribute এবং ফর্ম ভ্যালিডেশন

Spring MVC তে, ফর্ম ডেটার ভ্যালিডেশন করতে JSR-303 (Bean Validation) ব্যবহার করা যায় এবং @ModelAttribute এর মাধ্যমে এটি ইনপুট ফর্মে bind করা হয়।

উদাহরণ:

import org.springframework.validation.BindingResult;
import org.springframework.web.bind.annotation.Valid;

@Controller
public class UserController {

    @PostMapping("/submitForm")
    public String submitForm(@ModelAttribute @Valid User user, BindingResult result) {
        if (result.hasErrors()) {
            return "userForm"; // Return to the form if validation fails
        }
        return "formSuccess"; // Proceed if validation is successful
    }
}

ব্যাখ্যা:

  • @Valid: এটি ফর্ম ডেটা ভ্যালিডেশন চালানোর জন্য ব্যবহৃত হয়।
  • BindingResult: এটি ব্যাকএন্ডে ফর্ম ডেটার ভ্যালিডেশন ফলাফল ধারণ করে এবং আপনি এর মাধ্যমে ত্রুটি চেক করতে পারবেন।

User ক্লাস:

import javax.validation.constraints.NotEmpty;

public class User {

    @NotEmpty(message = "Username cannot be empty")
    private String username;

    private int age;

    // Getters and Setters
}

ব্যাখ্যা:

  • এখানে @NotEmpty অ্যানোটেশন ব্যবহার করা হয়েছে, যা নিশ্চিত করবে যে username ফিল্ড খালি না থাকবে।

উপসংহার

  • @ModelAttribute অ্যানোটেশন Spring MVC তে ডেটা পাস করার একটি শক্তিশালী পদ্ধতি।
  • ফর্ম ডেটা bind করতে, কাস্টম মডেল ডেটা ইনিশিয়ালাইজেশন, এবং ভ্যালিডেশন এর জন্য এটি ব্যবহৃত হয়।
  • আপনি @ModelAttribute দিয়ে ফর্ম ভ্যালিডেশন, ডাটা ইনিশিয়ালাইজেশন, এবং গ্লোবাল ডেটা প্রতিটি রিকোয়েস্টে সহজেই ইনজেক্ট করতে পারবেন।
Content added By

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 ব্যবহার করে ফর্মের ভ্যালিডেশন ফলাফল চেক করা হয় এবং ত্রুটি থাকলে তা ব্যবহারকারীকে প্রদর্শন করা হয়।

Content added By

Spring MVC তে Form Handling এবং Validation দুটি গুরুত্বপূর্ণ কনসেপ্ট। ফর্ম ডাটা সঠিকভাবে প্রক্রিয়া করার জন্য Spring MVC ফর্ম ডাটা গ্রহণ, প্রক্রিয়া এবং ভ্যালিডেশন করার জন্য শক্তিশালী সমাধান প্রদান করে। এই অংশে, আমরা একটি Spring MVC অ্যাপ্লিকেশন তৈরি করব যেখানে ফর্ম ডাটা গ্রহণ করা হবে এবং সেগুলি ভ্যালিডেশন করা হবে।

Step 1: Maven Dependencies

Spring MVC ফর্ম হ্যান্ডলিং এবং ভ্যালিডেশনের জন্য প্রয়োজনীয় ডিপেনডেন্সি Maven পম ফাইলে যোগ করুন।

<dependencies>
    <!-- Spring Boot Starter Web for MVC functionality -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>

    <!-- Spring Boot Starter Validation for form validation -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-validation</artifactId>
    </dependency>

    <!-- Thymeleaf for rendering the views -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-thymeleaf</artifactId>
    </dependency>

    <!-- Spring Boot Starter Test for testing purposes -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-test</artifactId>
    </dependency>
</dependencies>
  • spring-boot-starter-validation: এটি Java Bean Validation API (Hibernate Validator) ব্যবহার করে ফর্ম ভ্যালিডেশন এর জন্য প্রয়োজনীয় ডিপেনডেন্সি।
  • spring-boot-starter-web: Spring MVC এবং Tomcat এর জন্য প্রয়োজনীয় ডিপেনডেন্সি।

Step 2: Create Model with Validation Annotations

Spring MVC তে, ফর্ম ভ্যালিডেশন করার জন্য Java Bean Validation এর অ্যানোটেশন ব্যবহার করা হয়, যেমন @NotNull, @Size, @Email ইত্যাদি।

Model Class:

import javax.validation.constraints.NotBlank;
import javax.validation.constraints.Size;
import javax.validation.constraints.Email;

public class User {

    @NotBlank(message = "Name is required")
    @Size(min = 2, max = 50, message = "Name should be between 2 and 50 characters")
    private String name;

    @Email(message = "Invalid email format")
    @NotBlank(message = "Email is required")
    private String email;

    @NotBlank(message = "Password is required")
    @Size(min = 6, max = 20, message = "Password should be between 6 and 20 characters")
    private String password;

    // Getters and Setters
    public String getName() {
        return name;
    }

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

    public String getEmail() {
        return email;
    }

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

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }
}
  • @NotBlank: ডাটা ফিল্ডটি ফাঁকা থাকতে পারে না।
  • @Size(min, max): ফিল্ডের দৈর্ঘ্য একটি নির্দিষ্ট রেঞ্জের মধ্যে হতে হবে।
  • @Email: ইমেইল ঠিকানাটি সঠিক ফরম্যাটে থাকতে হবে।

Step 3: Controller for Form Handling and Validation

Spring MVC কন্ট্রোলার ক্লাসে ফর্ম ডাটা গ্রহণ এবং সেগুলি ভ্যালিডেশন করার জন্য @Valid অ্যানোটেশন ব্যবহার করা হয়। এটি BindingResult এর মাধ্যমে ভুল বার্তা প্রক্রিয়া করতে সাহায্য করে।

Controller Class:

import org.springframework.stereotype.Controller;
import org.springframework.validation.BindingResult;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.ui.Model;

import javax.validation.Valid;

@Controller
public class UserController {

    @GetMapping("/userForm")
    public String showForm(Model model) {
        model.addAttribute("user", new User());
        return "userForm";  // Display form to the user
    }

    @PostMapping("/submitForm")
    public String submitForm(@Valid User user, BindingResult result, Model model) {
        if (result.hasErrors()) {
            return "userForm"; // If validation fails, return to the form page
        }

        model.addAttribute("message", "User details saved successfully!");
        return "formSuccess";  // Display success message after successful submission
    }
}
  • @Valid: User অবজেক্টের উপর ভ্যালিডেশন চালাতে ব্যবহৃত হয়।
  • BindingResult result: এটি ফর্ম ভ্যালিডেশন ফলাফল ধারণ করে, যা ফর্ম সাবমিট করার পর পাওয়া ত্রুটিগুলি চেক করতে সাহায্য করে।
  • Model model: মডেল ডাটা ফর্মের সাথে যুক্ত করার জন্য ব্যবহৃত হয়।

Step 4: Create the Views

User Form (userForm.html):

<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
    <title>User Form</title>
</head>
<body>
    <h2>Enter User Details</h2>
    <form action="/submitForm" th:object="${user}" method="post">
        <label for="name">Name:</label>
        <input type="text" th:field="*{name}" id="name" /><br>
        <span th:if="${#fields.hasErrors('name')}" th:errors="*{name}"></span><br>

        <label for="email">Email:</label>
        <input type="text" th:field="*{email}" id="email" /><br>
        <span th:if="${#fields.hasErrors('email')}" th:errors="*{email}"></span><br>

        <label for="password">Password:</label>
        <input type="password" th:field="*{password}" id="password" /><br>
        <span th:if="${#fields.hasErrors('password')}" th:errors="*{password}"></span><br>

        <button type="submit">Submit</button>
    </form>
</body>
</html>
  • th:field="*{name}": Thymeleaf টেমপ্লেটে Spring Form এর ফিল্ডের সাথে ডাটা মডেল বাইনডিং করা হয়।
  • th:errors="*{name}": যদি কোনো ত্রুটি থাকে, তবে সেগুলি দেখানো হয়।

Success Page (formSuccess.html):

<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
    <title>Form Submission Success</title>
</head>
<body>
    <h2 th:text="${message}"></h2>
</body>
</html>

Step 5: Run the Application

Spring Boot অ্যাপ্লিকেশন চালু করার জন্য:

  1. Spring Boot অ্যাপ্লিকেশন ক্লাস তৈরি করুন (যদি না থাকে):
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class Application {
    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }
}
  1. অ্যাপ্লিকেশন রান করুন: mvn spring-boot:run অথবা IDE থেকে রান করুন।
  2. ব্যবহারকারী ফর্মে যান: http://localhost:8080/userForm

Step 6: Explanation

  • Form Handling: ব্যবহারকারী ইনপুট ফর্মে ডাটা পাঠালে, তা কন্ট্রোলারের মাধ্যমে মডেল এবং ভ্যালিডেশন প্রক্রিয়ার মধ্যে যাবে।
  • Validation: @NotBlank, @Size, @Email ইত্যাদি অ্যানোটেশন দ্বারা ফিল্ড ভ্যালিডেশন করা হবে।
  • Error Handling: যদি ফর্ম ভ্যালিডেশন ব্যর্থ হয়, তবে ত্রুটির বার্তা ব্যবহারকারীকে প্রদর্শন করা হবে।
  • Success Message: ফর্ম সফলভাবে সাবমিট হলে, একটি সফল বার্তা প্রদর্শিত হবে।

উপসংহার:

Spring MVC তে ফর্ম হ্যান্ডলিং এবং ভ্যালিডেশন একটি শক্তিশালী এবং সহজ প্রক্রিয়া। @Valid, BindingResult, এবং Spring MVC ফর্ম টেমপ্লেট ব্যবহার করে আপনি সহজে ফর্ম ডাটা গ্রহণ, ভ্যালিডেশন এবং ত্রুটি ম্যানেজমেন্ট করতে পারেন। এটি আপনার ওয়েব অ্যাপ্লিকেশনে একটি ক্লিন এবং রক্ষণাবেক্ষণযোগ্য ফর্ম হ্যান্ডলিং সমাধান প্রদান করে।

Content added By
Promotion

Are you sure to start over?

Loading...