Struts 2 একটি শক্তিশালী MVC (Model-View-Controller) ফ্রেমওয়ার্ক যা Form Data Binding-এর জন্য ModelDriven ইন্টারফেস সরবরাহ করে। ModelDriven Interface Struts 2-এ একটি সহজ এবং কার্যকরী উপায়, যা Action ক্লাসে ফর্ম ডেটা অ্যাক্সেস করতে সহায়ক হয়। এটি ডেটাবেস বা অন্যান্য স্টোরেজের সাথে ডেটা সিঙ্ক্রোনাইজ করতে ব্যবহৃত হয়, এবং এটি POJO (Plain Old Java Object) ব্যবহার করে ফর্ম ডেটা ম্যানেজমেন্ট সহজ করে।
Struts 2-এ, ModelDriven ইন্টারফেস ব্যবহার করে Action ক্লাসে ফর্ম ডেটা অ্যাক্সেস এবং প্রক্রিয়া করা হয়। এটি Struts 2 এর automatic data population সুবিধা প্রদান করে, যেখানে ফর্মের ইনপুট ডেটা স্বয়ংক্রিয়ভাবে Action ক্লাসের প্রপার্টিতে ম্যাপ করা হয়।
ModelDriven Interface এর ব্যবহার
ModelDriven ইন্টারফেসের মাধ্যমে আপনি Action ক্লাসে আপনার ফর্ম ডেটা প্যাকেজ করতে পারেন। Action ক্লাসে setModel() এবং getModel() মেথডের মাধ্যমে ফর্ম ডেটা অ্যাক্সেস করা হয়।
ModelDriven Interface এর উপকারিতা:
- Automatic Form Data Binding: ফর্ম ডেটা ইনপুট স্বয়ংক্রিয়ভাবে Action ক্লাসের প্রপার্টিতে ম্যাপ হয়।
- Object-Oriented: এটি POJO ব্যবহার করে ডেটা মডেল তৈরি করার সুযোগ দেয়, যা অ্যাকশন ক্লাসের সাথে সম্পৃক্ত।
- Readability and Maintainability: ডেটা ম্যানিপুলেশন এবং ফর্ম ইনপুট ভালোভাবে হ্যান্ডল করা যায়, যার ফলে কোড বেশি রিডেবল এবং মেইনটেইনেবল হয়।
উদাহরণ: ModelDriven Interface ব্যবহার করে Form Data Binding
ধরা যাক, আমাদের একটি ফর্ম আছে যেখানে ব্যবহারকারী তার নাম এবং বয়স ইনপুট করবে। আমরা ModelDriven ইন্টারফেস ব্যবহার করে ফর্ম ডেটা Action ক্লাসে বাইন্ড করতে পারি।
১. Action ক্লাস তৈরি করা
প্রথমে, আমরা ModelDriven ইন্টারফেস ইমপ্লিমেন্ট করে একটি Action ক্লাস তৈরি করব। এখানে, ফর্ম ডেটা Person নামে একটি POJO ক্লাসে রাখব।
package com.example;
import com.opensymphony.xwork2.ActionSupport;
import com.opensymphony.xwork2.ModelDriven;
public class PersonAction extends ActionSupport implements ModelDriven<Person> {
// Person model instance
private Person person = new Person();
// Getter and Setter for Person
public Person getPerson() {
return person;
}
public void setPerson(Person person) {
this.person = person;
}
// Implementing ModelDriven interface method
@Override
public Person getModel() {
return person;
}
// execute() method to handle the business logic
public String save() {
System.out.println("Name: " + person.getName());
System.out.println("Age: " + person.getAge());
return SUCCESS;
}
}
কোড ব্যাখ্যা:
- ModelDriven ইন্টারফেসটি Person POJO ক্লাসটি মডেল হিসেবে ব্যবহার করার জন্য ইমপ্লিমেন্ট করা হয়েছে।
- getModel() মেথডে Person অবজেক্টটি রিটার্ন করা হয়েছে, যা Struts 2 দ্বারা name এবং age ফর্ম ফিল্ডে থাকা ডেটা ধারণ করবে।
- save() মেথডে person অবজেক্টের ডেটা (যেমন নাম এবং বয়স) প্রিন্ট করা হয়েছে।
২. Person POJO ক্লাস তৈরি করা
package com.example;
public class Person {
private String name;
private int age;
// Getter and Setter methods
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
কোড ব্যাখ্যা:
- Person POJO ক্লাসে দুটি প্রপার্টি (
nameএবংage) রয়েছে, এবং এগুলোর জন্য getter এবং setter মেথড দেওয়া হয়েছে।
৩. struts.xml কনফিগারেশন
struts.xml ফাইলে অ্যাকশন কনফিগার করা হবে, যাতে ফর্ম ডেটা হ্যান্ডলিং করা যায়।
<struts>
<package name="default" extends="struts-default">
<action name="savePerson" class="com.example.PersonAction" method="save">
<result name="success">/WEB-INF/content/success.jsp</result>
<result name="error">/WEB-INF/content/error.jsp</result>
</action>
</package>
</struts>
কোড ব্যাখ্যা:
savePersonনামক অ্যাকশনটি PersonAction ক্লাসেরsave()মেথডকে কল করবে।- success এবং error রেজাল্ট পেজের জন্য রিটার্ন ভ্যালু SUCCESS অথবা ERROR অনুযায়ী রিডাইরেক্ট করবে।
৪. JSP ফর্ম তৈরি করা
এই ফর্মটি ব্যবহারকারীর ইনপুট গ্রহণ করবে এবং Struts 2 এর OGNL (Object-Graph Navigation Language) এর মাধ্যমে Person ক্লাসের প্রপার্টিতে মেপ হবে।
<!-- savePerson.jsp -->
<html>
<head><title>Save Person</title></head>
<body>
<h2>Person Form</h2>
<s:form action="savePerson" method="post">
<s:textfield name="person.name" label="Name" />
<s:textfield name="person.age" label="Age" />
<s:submit value="Save" />
</s:form>
</body>
</html>
কোড ব্যাখ্যা:
- s:form: Struts 2 ট্যাগ লাইব্রেরির form ট্যাগ ব্যবহার করে ফর্ম তৈরি করা হয়েছে।
- s:textfield: ব্যবহারকারী নাম এবং বয়স ইনপুট করার জন্য টেক্সটফিল্ড তৈরি করা হয়েছে।
- s:submit: ফর্ম সাবমিট করার জন্য একটি সাবমিট বাটন।
৫. Success JSP ফাইল
ফর্ম সাবমিটের পর, সফল হলে এটি success.jsp পেজে রিডাইরেক্ট হবে।
<!-- success.jsp -->
<html>
<head><title>Success</title></head>
<body>
<h2>Person Saved Successfully!</h2>
<p>Name: <s:property value="person.name" /></p>
<p>Age: <s:property value="person.age" /></p>
</body>
</html>
কোড ব্যাখ্যা:
- s:property ট্যাগ ব্যবহার করে Action ক্লাসের person অবজেক্টের
nameএবংageপ্রপার্টি প্রদর্শন করা হয়েছে।
উপসংহার
ModelDriven Interface ব্যবহার করে Struts 2-এ ফর্ম ডেটা বাইন্ডিং খুব সহজে এবং কার্যকরীভাবে করা যায়। এটি POJO মডেল ব্যবহার করে Action ক্লাসের মাধ্যমে ফর্ম ডেটা হ্যান্ডলিং করার একটি শক্তিশালী এবং সুসংগঠিত পদ্ধতি প্রদান করে। এই পদ্ধতি ডেটা ম্যানিপুলেশন, ইনপুট ভ্যালিডেশন এবং অ্যাকশন প্রক্রিয়াকরণ খুব সহজে পরিচালনা করতে সাহায্য করে। Struts 2-এর ModelDriven ফিচার ব্যবহার করে অ্যাপ্লিকেশনগুলি আরও রিডেবল, মেইনটেনেবল এবং এক্সটেনসিবল হয়।
Read more