OGNL (Object-Graph Navigation Language) হল একটি শক্তিশালী এক্সপ্রেশন ল্যাঙ্গুয়েজ যা Struts 2 এ ব্যবহৃত হয়। OGNL ব্যবহারকারীদেরকে Java অবজেক্টের প্রপার্টি এবং ডেটা এক্সপ্রেস করতে এবং পরিবর্তন করতে সক্ষম করে, এটি মূলত Model-View-Controller (MVC) আর্কিটেকচারে ডেটা ম্যানিপুলেশনের জন্য ব্যবহৃত হয়। Struts 2 ফ্রেমওয়ার্কের মধ্যে OGNL ডেটার প্রবাহ নিয়ন্ত্রণ এবং অ্যাকশন ক্লাসের প্রপার্টির সাথে ইন্টারঅ্যাক্ট করতে ব্যবহৃত হয়।
OGNL এর মূল সুবিধা
- ডাইনামিক এক্সপ্রেশন: OGNL স্ট্রিং ফর্ম্যাটে এক্সপ্রেশন ব্যবহার করে, যেগুলি রানটাইমে ডেটা রিট্রিভাল, পরিবর্তন এবং কম্প্লেক্স এক্সপ্রেশন রেজাল্ট বের করতে সক্ষম।
- কোডের শুদ্ধতা বৃদ্ধি: OGNL স্ট্রিং এক্সপ্রেশন ব্যবহার করার মাধ্যমে কোডের শুদ্ধতা বৃদ্ধি পায় এবং সহজে কোড রিফ্যাক্টরিং করা যায়।
- অ্যাবস্ট্রাকশন: OGNL অ্যাকশন ক্লাসের প্রপার্টির সাথে সরাসরি ইন্টারঅ্যাক্ট না করেও ডেটা রিট্রিভাল এবং ম্যানিপুলেশন করতে দেয়।
Struts 2-এ OGNL এর কাজ
Struts 2 ফ্রেমওয়ার্কে OGNL ব্যবহার করা হয়:
- Action Class Properties: OGNL ব্যবহার করে অ্যাকশন ক্লাসের প্রপার্টি ভ্যালু এক্সপ্রেস এবং রিটার্ন করা হয়।
- Data Binding: ইনপুট ফর্মের ডেটা অ্যাকশন ক্লাসের প্রপার্টিতে ম্যাপিং করার জন্য OGNL ব্যবহৃত হয়।
- Dynamic Expressions: ডাইনামিক এক্সপ্রেশন ব্যবহার করে একাধিক অ্যাকশন প্রপার্টি পরিচালনা করা যায়।
OGNL স্ট্রিং এক্সপ্রেশন সাধারণত JSP (JavaServer Pages) বা Struts 2 এ কাজ করার সময় (যেমন struts.xml কনফিগারেশন ফাইল) ব্যবহৃত হয়।
OGNL এর মূল এক্সপ্রেশন
OGNL এর মাধ্যমে কিছু গুরুত্বপূর্ণ এক্সপ্রেশন করা যায় যেমন:
- প্রপার্টি এক্সপ্রেশন:
user.name:userঅবজেক্টেরnameপ্রপার্টি রিট্রিভ করে।
- ফাংশন কল:
#user.getName():userঅবজেক্টেরgetName()মেথড কল করে।
- লজিক্যাল এক্সপ্রেশন:
#user.age > 18:userঅবজেক্টেরageপ্রপার্টি যদি ১৮ এর বেশি হয়, তবে ফলাফল সত্য হবে।
- লুপিং:
#list.size() > 0: একটি তালিকা যদি শূন্য না হয় তবে লজিক্যাল ফলাফল দেবে।
- অ্যারেতে এক্সপ্রেশন:
#array[0]: একটি অ্যারেতে প্রথম উপাদান রিটার্ন করে।
Struts 2-এ OGNL উদাহরণ
Struts 2 এ OGNL ব্যবহার করা হয় Action Class থেকে View (JSP) বা অন্য উপাদানে ডেটা পাঠানোর জন্য এবং রিটার্ন ভ্যালু গ্রহণের জন্য। নিচে একটি সাধারণ উদাহরণ দেওয়া হল:
1. Action Class উদাহরণ
package com.example.action;
import com.opensymphony.xwork2.ActionSupport;
public class UserAction extends ActionSupport {
private String username;
private String password;
// Getter and Setter methods
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
// Execute method that processes the data
public String execute() {
if ("admin".equals(username) && "admin123".equals(password)) {
return SUCCESS;
} else {
return ERROR;
}
}
}
এখানে, UserAction ক্লাসে username এবং password প্রপার্টি রয়েছে, যেগুলি ইনপুট ফর্ম থেকে প্রাপ্ত হবে। execute() মেথডটি ইউজারের ইনপুট যাচাই করে এবং তার উপর ভিত্তি করে SUCCESS বা ERROR রিটার্ন করে।
2. struts.xml কনফিগারেশন ফাইল
<struts>
<package name="default" extends="struts-default">
<action name="login" class="com.example.action.UserAction">
<result name="success">/welcome.jsp</result>
<result name="error">/login.jsp</result>
</action>
</package>
</struts>
এখানে, login অ্যাকশনটি UserAction ক্লাসের execute() মেথডে ম্যাপ করা হয়েছে। সফল হলে welcome.jsp এবং ত্রুটির ক্ষেত্রে login.jsp ফাইলটি রিটার্ন করবে।
3. login.jsp ফাইল (View)
<%@ taglib prefix="s" uri="/struts-tags" %>
<html>
<head>
<title>Login Page</title>
</head>
<body>
<h2>Login Form</h2>
<s:form action="login" method="post">
<s:textfield name="username" label="Username" />
<s:password name="password" label="Password" />
<s:submit value="Login" />
</s:form>
</body>
</html>
এখানে, s:form ট্যাগটি OGNL ব্যবহার করে username এবং password ফিল্ডের ডেটা UserAction ক্লাসে পাঠাবে।
4. welcome.jsp ফাইল (View)
<%@ taglib prefix="s" uri="/struts-tags" %>
<html>
<head>
<title>Welcome</title>
</head>
<body>
<h2>Welcome, <s:property value="username" /></h2>
</body>
</html>
এখানে, s:property OGNL ব্যবহার করে UserAction ক্লাসের username প্রপার্টির মান রিটার্ন করে এবং welcome.jsp ফাইলে প্রদর্শন করা হয়।
OGNL এর আরও কিছু ব্যবহার
- ইনপুট ভ্যালিডেশন:
- OGNL ব্যবহার করে ফর্ম ডেটা সোজা Action প্রপার্টিতে পাঠানো হয়। আপনি একাধিক ফর্ম ফিল্ডের উপর কাস্টম ভ্যালিডেশনও প্রয়োগ করতে পারেন।
- ডেটা বাইন্ডিং:
- OGNL ব্যবহার করে Action ক্লাসে ইনপুট ফিল্ড থেকে ডেটা বাইন্ড করা হয়। যেমন,
s:textfield,s:textareaইত্যাদি ট্যাগ ব্যবহার করে ব্যবহারকারীর ইনপুট Action প্রপার্টিতে বাইন্ড করা হয়।
- OGNL ব্যবহার করে Action ক্লাসে ইনপুট ফিল্ড থেকে ডেটা বাইন্ড করা হয়। যেমন,
- অ্যারে, লিস্ট এবং ম্যাপ হ্যান্ডলিং:
- OGNL ব্যবহার করে অ্যারে, লিস্ট এবং ম্যাপের মধ্যে ডেটা রিট্রিভাল এবং এক্সপ্রেশন তৈরি করা যেতে পারে। যেমন, একটি অ্যারেতে কোনও নির্দিষ্ট মান চেক করতে OGNL এক্সপ্রেশন ব্যবহার করা।
সারাংশ
Struts 2-এ OGNL (Object-Graph Navigation Language) একটি অত্যন্ত শক্তিশালী এক্সপ্রেশন ল্যাঙ্গুয়েজ যা Action ক্লাসের প্রপার্টি থেকে ডেটা রিট্রিভাল এবং এক্সপ্রেশন তৈরি করতে ব্যবহৃত হয়। OGNL এর মাধ্যমে আপনি অ্যাকশন প্রপার্টির মান রিটার্ন, ইনপুট ফর্মে ডেটা বাইন্ডিং এবং ডাইনামিক এক্সপ্রেশন করতে পারেন। এটি MVC আর্কিটেকচারে ডেটা প্রবাহের মধ্যে একটি গুরুত্বপূর্ণ ভূমিকা পালন করে এবং কোডের শুদ্ধতা এবং রিডেবিলিটি বৃদ্ধি করে।
Read more