Apache Tapestry একটি event-driven framework, যা ডেভেলপারদের ইভেন্টগুলির মাধ্যমে ইউজার ইন্টারফেসের কার্যকলাপ পরিচালনা করতে সক্ষম করে। Tapestry-এর Event-Driven Programming মডেল ব্যবহারকারীদের এক্সপ্রেশন এবং অ্যাকশনগুলির প্রতি প্রতিক্রিয়া জানানোর মাধ্যমে অ্যাপ্লিকেশনকে ডাইনামিক এবং ইনটারঅ্যাকটিভ করে তোলে। এটি Tapestry-এর একটি প্রধান বৈশিষ্ট্য, যেখানে পেজের বিভিন্ন UI উপাদান (যেমন, বাটন, লিঙ্ক, ইনপুট ফিল্ড) ব্যবহারকারী ইনপুট বা ইভেন্টের প্রতি সাড়া দেয়।
এতে, আপনি UI কম্পোনেন্ট এবং ব্যাকএন্ড লজিক এর মধ্যে ইভেন্টের মাধ্যমে যোগাযোগ স্থাপন করতে পারেন। Tapestry এর এই ইভেন্ট ড্রিভেন মডেল অ্যাপ্লিকেশন ডেভেলপমেন্টকে আরও সহজ এবং কার্যকর করে তোলে।
Tapestry তে Event-Driven Programming মূলত UI কম্পোনেন্ট এবং ব্যাকএন্ড মেথড এর মধ্যে ইভেন্ট ট্রিগারিং এবং হ্যান্ডলিংয়ের মাধ্যমে কাজ করে। যখন একটি ইউজার ইন্টারঅ্যাকশন ঘটে (যেমন বাটন ক্লিক করা), তখন একটি নির্দিষ্ট ইভেন্ট তৈরি হয়, যা Tapestry ইন্টারনাল প্রসেসিং দ্বারা একটি মেথড কল করে।
t:button
, t:link
, t:textfield
) ইউজার থেকে ইনপুট বা অ্যাকশন নেয়।ধরা যাক, আপনি একটি login form তৈরি করতে চান যেখানে একটি login বাটন রয়েছে। ব্যবহারকারী যখন এই বাটনে ক্লিক করবেন, তখন অ্যাপ্লিকেশনটি লগইন ডেটা ভ্যালিডেট করবে।
<html xmlns:t="http://tapestry.apache.org/schema/tapestry_5_3.xsd">
<head>
<title>Login Form</title>
</head>
<body>
<h2>Login</h2>
<!-- Tapestry Form with Button Event -->
<t:form t:id="loginForm">
<t:label value="Username" for="username"/>
<t:textfield t:id="username" value="username"/>
<t:label value="Password" for="password"/>
<t:passwordfield t:id="password" value="password"/>
<!-- Login Button with Event Handling -->
<t:button t:id="loginButton" value="Login" />
</t:form>
</body>
</html>
এখানে:
t:form
: এটি একটি ফর্ম তৈরি করে।t:textfield
: এটি একটি টেক্সটফিল্ড তৈরি করে।t:passwordfield
: এটি একটি পাসওয়ার্ড ইনপুট ফিল্ড তৈরি করে।t:button
: এটি একটি বাটন তৈরি করে, যা login ইভেন্টের জন্য ট্রিগার হবে।এখন, login বাটনে ক্লিক করার পর ইভেন্টটি হ্যান্ডেল করার জন্য একটি Java মেথড তৈরি করতে হবে।
package com.example.pages;
import org.apache.tapestry5.annotations.Property;
import org.apache.tapestry5.annotations.OnEvent;
public class Login {
@Property
private String username;
@Property
private String password;
// Method to handle the Login event triggered by the login button
@OnEvent(value = "submit", component = "loginButton")
public String onLogin() {
// Simulate login validation
if ("admin".equals(username) && "password".equals(password)) {
return "Welcome, " + username;
} else {
return "Invalid username or password.";
}
}
}
এখানে:
@OnEvent
: এই অ্যানোটেশনটি loginButton থেকে "submit" ইভেন্ট হ্যান্ডল করার জন্য ব্যবহৃত হচ্ছে।onLogin()
: এই মেথডটি তখন কল হবে যখন loginButton তে ক্লিক করা হবে। এখানে আপনি username এবং password যাচাই করবেন এবং সঠিক হলে ব্যবহারকারীকে একটি স্বাগত বার্তা দিবেন, অন্যথায় ভুল বার্তা দেখাবেন।Tapestry তে বিভিন্ন ধরনের ইভেন্ট ব্যবহার করা যেতে পারে, যেমন:
t:form
কম্পোনেন্টে)।t:textfield
, t:checkbox
)।এই ইভেন্টগুলির মাধ্যমে Tapestry ডেভেলপাররা ইউজার ইন্টারঅ্যাকশনগুলির প্রতিক্রিয়া জানাতে পারেন।
Tapestry একটি শক্তিশালী Event-Driven Programming মডেল সরবরাহ করে, যা ব্যবহারকারীর ইনপুটের ভিত্তিতে ইউজার ইন্টারফেসের প্রতিক্রিয়া তৈরি করতে সাহায্য করে। ইভেন্ট হ্যান্ডলিংয়ের মাধ্যমে, আপনি UI কম্পোনেন্টের সাথে ব্যাকএন্ড লজিককে সংযুক্ত করতে পারেন এবং দ্রুত, ডাইনামিক অ্যাপ্লিকেশন তৈরি করতে পারেন। @OnEvent অ্যানোটেশন ব্যবহার করে ইভেন্ট হ্যান্ডলিং বাস্তবায়ন করা যায়, যা Tapestry কে আরও কার্যকর এবং নমনীয় করে তোলে।
Apache Tapestry একটি Event-Driven Programming (EDP) মডেল অনুসরণ করে, যেখানে অ্যাপ্লিকেশনটির কার্যকলাপ বিভিন্ন ইভেন্টের মাধ্যমে নিয়ন্ত্রিত হয়। এই ইভেন্টগুলির মাধ্যমে ইউজার ইন্টারঅ্যাকশন, ডেটা সাবমিশন, এবং অন্যান্য কার্যক্রম পরিচালিত হয়। Tapestry এর Event Lifecycle এবং Event Processing ব্যবস্থার মাধ্যমে আপনি সহজে ওয়েব অ্যাপ্লিকেশনে ইভেন্ট হ্যান্ডলিং এবং প্রসেসিং করতে পারেন।
এই টিউটোরিয়ালে, আমরা Tapestry Event Lifecycle এবং Event Processing পদ্ধতি বিস্তারিতভাবে আলোচনা করব।
Tapestry-তে ইভেন্ট লাইফসাইকেল এর মধ্যে বিভিন্ন স্টেপ থাকে, যার মাধ্যমে ওয়েব অ্যাপ্লিকেশনটি ইউজারদের আউটপুট তৈরি করার জন্য প্রক্রিয়া সম্পন্ন করে। ইভেন্ট লাইফসাইকেল মূলত একটি ইভেন্ট ট্রিগার করার মাধ্যমে শুরু হয়, যা পরবর্তী স্টেপগুলির মাধ্যমে প্রক্রিয়া চলে এবং শেষে ইউজারকে রেসপন্স প্রদান করা হয়।
onSuccessFromFormName()
বা onClick
এর মতো মেথড কল হতে পারে।Tapestry-তে ইভেন্ট প্রসেসিং একটি ইভেন্ট হ্যান্ডলারের মাধ্যমে হয়, যা Tapestry এর জন্য গুরুত্বপূর্ণ। যখন একটি ইভেন্ট ঘটে, তখন এটি সাধারণত সংশ্লিষ্ট Java ক্লাসের মেথড দ্বারা প্রক্রিয়া করা হয়।
Tapestry-তে একটি ইভেন্ট সাধারণত একটি মেথড দ্বারা হ্যান্ডল করা হয়। এই মেথডগুলো on<EventName>
ফর্ম্যাটে থাকে এবং নির্দিষ্ট ইভেন্টের জন্য কল হয়।
ধরা যাক, আপনি একটি লগইন ফর্ম তৈরি করেছেন যেখানে ব্যবহারকারীরা username এবং password প্রদান করবে। এবং ফর্মটি সাবমিট করার পর, Tapestry তার নির্দিষ্ট ইভেন্ট হ্যান্ডলিং মেথড কল করবে।
<html xmlns:t="http://tapestry.apache.org/schema/tapestry_5_3.xsd">
<head>
<title>Login</title>
</head>
<body>
<h2>Login</h2>
<t:form t:id="loginForm">
<t:label value="Username" for="username" />
<t:textfield t:id="username" value="username" />
<t:label value="Password" for="password" />
<t:passwordfield t:id="password" value="password" />
<t:button t:id="loginButton" value="Login" />
</t:form>
</body>
</html>
package com.example.pages;
import org.apache.tapestry5.annotations.Property;
import org.apache.tapestry5.annotations.OnEvent;
public class Login {
@Property
private String username;
@Property
private String password;
// Event handler for login button click
@OnEvent(value = "submit", component = "loginButton")
public Object onLogin() {
if ("admin".equals(username) && "password".equals(password)) {
return Home.class; // Redirect to home page if login is successful
} else {
return Login.class; // Stay on login page if credentials are incorrect
}
}
}
এখানে:
@OnEvent
অ্যানোটেশন ব্যবহার করা হয়েছে, যা "submit" ইভেন্টটি loginButton থেকে গ্রহন করে onLogin() মেথডকে কল করবে।on<EventName>
ফর্ম্যাটে তৈরি হয়। উদাহরণস্বরূপ, onSuccessFromForm অথবা onClick।Tapestry-তে Event-Driven Programming একটি গুরুত্বপূর্ণ ধারণা, যা আপনাকে ইভেন্টের মাধ্যমে ওয়েব অ্যাপ্লিকেশনের কার্যকলাপ পরিচালনা করতে সহায়তা করে। Event Lifecycle এর মধ্যে ইভেন্ট গ্রহন থেকে শুরু করে, তার প্রসেসিং এবং রেন্ডারিং পর্যন্ত সমস্ত ধাপ অন্তর্ভুক্ত থাকে। Tapestry এর Event Processing একটি ইভেন্ট হ্যান্ডলার মেথডের মাধ্যমে সম্পন্ন হয়, যেখানে ইউজার ইন্টারঅ্যাকশন (যেমন ফর্ম সাবমিশন বা বাটন ক্লিক) ব্যবহার করে অ্যাপ্লিকেশনের কার্যকলাপ পরিচালিত হয়। Tapestry এ @OnEvent
অ্যানোটেশন এবং ইভেন্ট মেথডের মাধ্যমে সহজেই ইভেন্ট হ্যান্ডলিং করা যায়।
Apache Tapestry একটি Event-Driven Programming (ইভেন্ট ড্রিভেন প্রোগ্রামিং) মডেল অনুসরণ করে, যেখানে ব্যবহারকারী ইন্টারঅ্যাকশন বা সিস্টেমের অন্য কোনো পরিবর্তন থেকে ইভেন্ট ট্রিগার করা হয় এবং সংশ্লিষ্ট event handler মেথডগুলো কল করা হয়। Tapestry ফ্রেমওয়ার্ক ব্যবহারকারী ইন্টারঅ্যাকশনকে events হিসেবে মান্য করে, যেমন একটি বাটন ক্লিক, ফর্ম সাবমিট, পেজ লোড ইত্যাদি, এবং এগুলোর জন্য event listeners বা event handlers দিয়ে ব্যবস্থা করা হয়।
এই টিউটোরিয়ালে আমরা শিখবো কীভাবে Tapestry-তে events ট্রিগার করা হয় এবং সেগুলো handle করা হয়।
Tapestry-এর Event Lifecycle এবং Event Processing বেশ কার্যকরী, যেখানে আপনি ইভেন্ট ট্রিগার এবং প্রসেসিংয়ের মাধ্যমে ডেটা ইন্টারঅ্যাকশন পরিচালনা করতে পারেন। Tapestry তে ইভেন্টগুলো সাধারণত ব্যবহারকারীর অ্যাকশন (যেমন বাটন ক্লিক) বা অ্যাপ্লিকেশন লজিকের অংশ হিসেবে ট্রিগার হয়।
Tapestry এর ইভেন্ট লাইফসাইকেল মূলত পাঁচটি ধাপে বিভক্ত:
Tapestry-তে ইভেন্ট ট্রিগার এবং হ্যান্ডল করার জন্য, আপনি @OnEvent অ্যানোটেশন অথবা event handler methods ব্যবহার করতে পারেন। এই ইভেন্ট হ্যান্ডলার মেথড ব্যবহারকারীর ইন্টারঅ্যাকশনের প্রতিক্রিয়া হিসেবে কল হয়।
ধরা যাক, আপনি একটি সিম্পল Login Form তৈরি করতে চান, যেখানে একটি Login বাটন ক্লিক করা হলে লগইন প্রক্রিয়া সম্পন্ন হবে।
<html xmlns:t="http://tapestry.apache.org/schema/tapestry_5_3.xsd">
<head>
<title>Login Form</title>
</head>
<body>
<h2>Login</h2>
<!-- Tapestry form with action trigger on button click -->
<t:form t:id="loginForm">
<t:label value="Username" for="username" />
<t:textfield t:id="username" value="username" />
<t:label value="Password" for="password" />
<t:passwordfield t:id="password" value="password" />
<!-- Submit button triggering the login event -->
<t:button t:id="loginButton" value="Login" />
</t:form>
</body>
</html>
এখানে:
package com.example.pages;
import org.apache.tapestry5.annotations.Property;
import org.apache.tapestry5.annotations.OnEvent;
public class Login {
@Property
private String username;
@Property
private String password;
// Handle the form submission event triggered by the login button
@OnEvent(value = "submit", component = "loginButton")
public String onLogin() {
if ("admin".equals(username) && "password".equals(password)) {
return "Welcome " + username; // Success message
} else {
return "Invalid login credentials."; // Error message
}
}
}
এখানে:
ধরা যাক, আপনি একটি ফর্ম তৈরি করতে চান যা ব্যবহারকারীর Contact Info নিবন্ধন গ্রহণ করবে এবং একটি ইভেন্ট হ্যান্ডলারের মাধ্যমে ডেটা প্রক্রিয়া করবে।
<html xmlns:t="http://tapestry.apache.org/schema/tapestry_5_3.xsd">
<head>
<title>Contact Form</title>
</head>
<body>
<h2>Contact Us</h2>
<!-- Form for collecting contact info -->
<t:form t:id="contactForm">
<t:label value="Name" for="name" />
<t:textfield t:id="name" value="name" />
<t:label value="Email" for="email" />
<t:textfield t:id="email" value="email" />
<t:label value="Message" for="message" />
<t:textarea t:id="message" value="message" />
<!-- Submit button triggering the contact submission event -->
<t:button t:id="submitButton" value="Submit" />
</t:form>
</body>
</html>
package com.example.pages;
import org.apache.tapestry5.annotations.Property;
import org.apache.tapestry5.annotations.OnEvent;
public class ContactForm {
@Property
private String name;
@Property
private String email;
@Property
private String message;
// Handle the form submission event triggered by the submit button
@OnEvent(value = "submit", component = "submitButton")
public String onSubmit() {
// Process the submitted contact form data
if (name != null && email != null && message != null) {
// Handle the contact data (e.g., send email or save to database)
return "Thank you for contacting us, " + name;
} else {
return "Please fill all fields.";
}
}
}
এখানে:
Tapestry তে Event-Driven Programming একটি শক্তিশালী ধারণা, যা ব্যবহারকারীর ইন্টারঅ্যাকশনকে event triggers এবং event handlers এর মাধ্যমে প্রক্রিয়া করতে সহায়তা করে। আপনি @OnEvent অ্যানোটেশন ব্যবহার করে ইভেন্ট হ্যান্ডলিং করতে পারেন, যেমন একটি বাটন ক্লিক বা ফর্ম সাবমিটের মাধ্যমে ইভেন্ট ট্রিগার করা এবং সংশ্লিষ্ট মেথডে তা হ্যান্ডল করা। Tapestry এর event-driven মডেল অ্যাপ্লিকেশন ডেভেলপমেন্টে মসৃণতা এবং নমনীয়তা যোগ করে।
Apache Tapestry একটি component-based framework, যেখানে UI উপাদানগুলোকে স্বাধীন কম্পোনেন্ট হিসেবে তৈরি করা হয় এবং তারা একে অপরের সাথে ইন্টারঅ্যাক্ট করে। কম্পোনেন্ট এবং পেজের মধ্যে ইন্টারঅ্যাকশন টেপেস্ট্রি অ্যাপ্লিকেশন ডেভেলপমেন্টের একটি গুরুত্বপূর্ণ দিক, যেখানে কম্পোনেন্টগুলি ডেটা শেয়ার করতে, ইভেন্ট ট্রিগার করতে এবং পেজের মধ্যে ডায়নামিক ইনফরমেশন পরিবর্তন করতে ব্যবহৃত হয়।
এই টিউটোরিয়ালে, আমরা কীভাবে কম্পোনেন্ট এবং পেজ এর মধ্যে ইন্টারঅ্যাকশন করতে হয় এবং তাদের মধ্যে ডেটা ও ইভেন্ট শেয়ার করা যায়, তা বিস্তারিতভাবে দেখব।
Tapestry কম্পোনেন্টগুলি স্বতন্ত্র UI উপাদান (যেমন, টেক্সটফিল্ড, বাটন, ড্রপডাউন) হিসেবে কাজ করে, এবং এগুলি পেজের সাথে ডেটা বা ইভেন্ট শেয়ার করতে পারে। কম্পোনেন্ট এবং পেজের মধ্যে ইন্টারঅ্যাকশন প্রধানত ডেটা বাউন্ডিং এবং ইভেন্ট হ্যান্ডলিংয়ের মাধ্যমে ঘটে।
ধরা যাক, আপনি একটি UserForm নামের কম্পোনেন্ট তৈরি করতে চান যা ব্যবহারকারীর নাম এবং ইমেইল গ্রহণ করবে এবং পেজে সেই তথ্য প্রদর্শন করবে।
package com.example.components;
import org.apache.tapestry5.annotations.Property;
import org.apache.tapestry5.annotations.Parameter;
public class UserForm {
@Property
private String userName; // User input for username
@Property
private String userEmail; // User input for email
// Method to pass data back to parent page (if needed)
public void onSuccess() {
// You can add logic here to process or send data to the parent page
}
}
userName
এবং userEmail
ফিল্ডগুলির মান পেজের সঙ্গে বাইনড করা হবে।<html xmlns:t="http://tapestry.apache.org/schema/tapestry_5_3.xsd">
<head>
<title>User Form</title>
</head>
<body>
<form>
<t:label value="Username" for="userName"/>
<t:textfield t:id="userName" value="userName"/>
<t:label value="Email" for="userEmail"/>
<t:textfield t:id="userEmail" value="userEmail"/>
<t:button t:id="submitButton" value="Submit" />
</form>
</body>
</html>
t:textfield
: এই কম্পোনেন্টটি ইনপুট ফিল্ড তৈরি করে।t:button
: এটি একটি বাটন তৈরি করে যা ফর্ম সাবমিট করার জন্য ব্যবহৃত হয়।এখন, UserForm কম্পোনেন্টটি একটি পেজের মধ্যে ব্যবহার করা হবে। এখানে পেজটি ব্যবহারকারীর নাম এবং ইমেইল তথ্য প্রদর্শন করবে।
package com.example.pages;
import org.apache.tapestry5.annotations.Import;
import org.apache.tapestry5.annotations.Property;
public class UserPage {
@Property
private String userName; // User's name
@Property
private String userEmail; // User's email
// Method to be called when the UserForm component's form is successfully submitted
public void onSuccessFromUserForm() {
// After form submission, you can use the data and take necessary actions.
}
}
userName
এবং userEmail
ফিল্ডগুলি পেজের সাথে বাইনড করা হয়।<html xmlns:t="http://tapestry.apache.org/schema/tapestry_5_3.xsd">
<head>
<title>User Page</title>
</head>
<body>
<h2>Welcome, <t:property value="userName"/>!</h2>
<h3>Your email: <t:property value="userEmail"/></h3>
<t:include page="UserForm" />
</body>
</html>
<t:property value="userName"/>
: এটি userName
প্রপার্টির মান প্রদর্শন করবে, যা কম্পোনেন্ট থেকে পেজে প্রেরিত হবে।<t:include page="UserForm"/>
: এই কম্পোনেন্টটি পেজের মধ্যে UserForm কম্পোনেন্ট অন্তর্ভুক্ত করবে।Tapestry তে ইভেন্ট ট্রিগার এবং হ্যান্ডলিং খুবই গুরুত্বপূর্ণ। কম্পোনেন্টে ইভেন্ট ট্রিগার করার জন্য এবং পেজে সেই ইভেন্ট হ্যান্ডল করার জন্য বিশেষ কিছু অ্যানোটেশন এবং পদ্ধতি রয়েছে।
ধরা যাক, একটি SubmitButton কম্পোনেন্ট তৈরি করতে চান, যা একটি সাবমিট বাটন ক্লিকের মাধ্যমে একটি ইভেন্ট ট্রিগার করবে এবং পেজে সেই ইভেন্ট হ্যান্ডল হবে।
package com.example.components;
import org.apache.tapestry5.annotations.OnEvent;
import org.apache.tapestry5.annotations.Property;
public class SubmitButton {
@Property
private String message;
// Event handler for the submit event
@OnEvent("submit")
public String onSubmit() {
return "Form submitted successfully!";
}
}
onSubmit()
মেথডটি কল হবে।package com.example.pages;
import org.apache.tapestry5.annotations.Property;
public class SubmitPage {
@Property
private String message;
// Method to capture the message from the SubmitButton component
public void onSuccessFromSubmitButton() {
message = "Form has been successfully processed!";
}
}
<html xmlns:t="http://tapestry.apache.org/schema/tapestry_5_3.xsd">
<head>
<title>Submit Page</title>
</head>
<body>
<h2>Submit Form</h2>
<t:form>
<t:submitButton t:id="submitButton"/>
</t:form>
<h3>Message: <t:property value="message"/></h3>
</body>
</html>
<t:submitButton />
: এটি SubmitButton কম্পোনেন্টকে অন্তর্ভুক্ত করবে এবং submit ইভেন্ট ট্রিগার করবে।<t:property value="message"/>
: এটি SubmitPage পেজ থেকে মেসেজ প্রদর্শন করবে।Tapestry-তে কম্পোনেন্ট এবং পেজ ইন্টারঅ্যাকশন একটি গুরুত্বপূর্ণ অংশ। কম্পোনেন্টের মধ্যে ডেটা বা ইভেন্ট শেয়ার করার জন্য ডেটা বাউন্ডিং এবং ইভেন্ট হ্যান্ডলিং ব্যবহৃত হয়। Tapestry-তে কম্পোনেন্ট তৈরি করা, পেজে কম্পোনেন্ট ইন্টিগ্রেট করা, এবং ইভেন্ট ট্রিগার ও হ্যান্ডলিংয়ের মাধ্যমে কম্পোনেন্ট এবং পেজের মধ্যে কার্যকর ইন্টারঅ্যাকশন করা যায়। এই প্রক্রিয়াগুলির মাধ্যমে আপনার অ্যাপ্লিকেশনটি আরও ডায়নামিক এবং ইন্টারঅ্যাকটিভ হতে পারে।
Apache Tapestry একটি event-driven programming পদ্ধতি অনুসরণ করে, যেখানে পেজ বা কম্পোনেন্টের মধ্যে ইভেন্ট ট্রিগারিং এবং ইভেন্ট হ্যান্ডলিং একটি গুরুত্বপূর্ণ ভূমিকা পালন করে। Tapestry তে Event Bubbles এবং Event Delegation দুটি গুরুত্বপূর্ণ ধারণা, যা ইভেন্ট প্রক্রিয়াকরণের ফ্লো এবং কার্যকারিতা নিয়ন্ত্রণ করে। এই দুটি ধারণা বুঝতে পারলে, Tapestry এর ইভেন্ট সিস্টেম আরও পরিষ্কার এবং কার্যকরীভাবে ব্যবহার করা যাবে।
Event Bubbles হল একটি প্রক্রিয়া যেখানে একটি কম্পোনেন্ট ইভেন্ট ট্রিগার করার পর, সেই ইভেন্টটি উপরের স্তরের কম্পোনেন্টে (যেমন পেজে বা পেজের সন্নিহিত কম্পোনেন্টে) "বুবল" (propagate) হয়ে পৌঁছায়। এটি DOM (Document Object Model) এর সাথে সম্পর্কিত একটি ধারণা, যেখানে ইভেন্ট শুরু হয় এবং উপরের স্তরে প্রপাগেট করে, যতক্ষণ না তা থামানো হয়।
Tapestry তে ইভেন্ট বুবলিং এর মাধ্যমে কম্পোনেন্টগুলো তাদের parent component অথবা page এর দিকে ইভেন্ট প্রেরণ করতে পারে।
ধরা যাক, একটি button ক্লিক করার পর আপনি চান যে ইভেন্টটি কম্পোনেন্ট থেকে পেজের দিকে প্রপাগেট হোক।
<html xmlns:t="http://tapestry.apache.org/schema/tapestry_5_3.xsd">
<body>
<t:button t:id="clickButton" value="Click Me" />
</body>
</html>
package com.example.pages;
import org.apache.tapestry5.annotations.OnEvent;
public class ButtonPage {
// Button click event handler
@OnEvent(value = "click", component = "clickButton")
public String onButtonClick() {
// Handle the button click event here
return "Button clicked, event bubbled!";
}
}
এখানে:
Event Delegation হল একটি প্রক্রিয়া যেখানে একটি কম্পোনেন্ট ইভেন্টটি তার parent component বা parent page এ ডেলিগেট (delegated) করে, এবং সেই parent ইভেন্টটি হ্যান্ডল করে। Tapestry তে, একটি কম্পোনেন্ট তার প্যারেন্ট বা পেজে ইভেন্ট ডেলিগেট করতে পারে, যা অনেক সময় প্রয়োজনীয় এবং সহজ।
ধরা যাক, একটি কম্পোনেন্টে যখন ইভেন্ট ট্রিগার হয়, তখন সেই ইভেন্টটি পেজের কাছে ডেলিগেট করা হবে।
<html xmlns:t="http://tapestry.apache.org/schema/tapestry_5_3.xsd">
<body>
<t:button t:id="childButton" value="Click Me" />
</body>
</html>
package com.example.components;
import org.apache.tapestry5.annotations.OnEvent;
public class ChildComponent {
@OnEvent(value = "click", component = "childButton")
public String onButtonClick() {
return "Button clicked in child component!";
}
}
package com.example.pages;
import org.apache.tapestry5.annotations.OnEvent;
public class ParentPage {
@OnEvent(value = "click", component = "childButton")
public String onChildButtonClick() {
return "Event delegated to parent page!";
}
}
এখানে:
বৈশিষ্ট্য | Event Bubbles | Event Delegation |
---|---|---|
প্রক্রিয়া | ইভেন্ট কম্পোনেন্ট থেকে উপরের স্তরের কম্পোনেন্ট বা পেজে প্রপাগেট হয়। | ইভেন্ট এক কম্পোনেন্ট বা পেজ থেকে অন্য কম্পোনেন্ট বা পেজে ডেলিগেট হয়। |
হ্যান্ডলিং | উপরের স্তরের কম্পোনেন্ট বা পেজে হ্যান্ডল করা হয়। | প্যারেন্ট কম্পোনেন্ট বা পেজে হ্যান্ডল করা হয়। |
ব্যবহার | সাধারণত, কম্পোনেন্টের মধ্যে ইভেন্ট ট্রান্সফার করতে। | যখন আপনি ইভেন্ট প্যারেন্ট পেজ বা কম্পোনেন্টে ডেলিগেট করতে চান। |
কার্যকারিতা | ইভেন্টটি একটি কম্পোনেন্ট থেকে উপরের স্তরে পৌঁছে, তবে এটি থামানো যেতে পারে। | ইভেন্টটি সরাসরি প্যারেন্ট কম্পোনেন্ট বা পেজে পাঠানো হয়। |
Event Bubbles এবং Event Delegation Tapestry এর ইভেন্ট প্রক্রিয়াকরণে গুরুত্বপূর্ণ ভূমিকা পালন করে। Event Bubbles তে, একটি কম্পোনেন্টের ইভেন্ট উপরের স্তরের কম্পোনেন্ট বা পেজে প্রপাগেট করে, যখন Event Delegation তে, একটি কম্পোনেন্ট তার ইভেন্ট প্যারেন্ট কম্পোনেন্ট বা পেজে ডেলিগেট করে। দুটি প্রক্রিয়া কোডের কার্যকারিতা এবং প্রক্রিয়া ব্যবস্থাপনা সহজ করে এবং Tapestry এর ইভেন্ট সিস্টেমকে আরও নমনীয় ও কার্যকরী করে তোলে।
Read more