JSF (JavaServer Faces) ফ্রেমওয়ার্কে ValueChangeListener এবং PhaseListener দুটি অত্যন্ত গুরুত্বপূর্ণ ইন্টারফেস যা UI উপাদানগুলির মান পরিবর্তন এবং JSF লাইফসাইকেলের বিভিন্ন পর্যায় পর্যবেক্ষণ করতে ব্যবহৃত হয়। এই দুটি ইন্টারফেস ব্যবহার করে আপনি JSF অ্যাপ্লিকেশনের ইনপুট এবং লাইফসাইকেল প্রক্রিয়া আরো কাস্টমাইজ করতে পারেন।
ValueChangeListener
ValueChangeListener একটি ইন্টারফেস যা ব্যবহারকারীর ইনপুট মান পরিবর্তন হলে ঘটিত ইভেন্ট হ্যান্ডল করার জন্য ব্যবহৃত হয়। এটি সাধারণত একটি UI উপাদান (যেমন একটি ইনপুট ফিল্ড বা ড্রপডাউন) এর মান পরিবর্তন হলে ট্রিগার হয় এবং মান পরিবর্তনের সাথে সংশ্লিষ্ট কাস্টম লজিক কার্যকর করতে সাহায্য করে।
উদাহরণ: ValueChangeListener ব্যবহার করা
ধরা যাক, আপনি একটি ড্রপডাউন থেকে রঙ নির্বাচন করছেন এবং সেই নির্বাচিত রঙের উপর ভিত্তি করে অন্যান্য UI উপাদান পরিবর্তন করতে চান।
XHTML পেজ (UI):
<h:form>
<h:outputLabel for="color" value="Select Color:" />
<h:selectOneMenu value="#{bean.selectedColor}" id="color">
<f:selectItem itemLabel="Red" itemValue="red" />
<f:selectItem itemLabel="Green" itemValue="green" />
<f:selectItem itemLabel="Blue" itemValue="blue" />
<f:ajax event="valueChange" listener="#{bean.colorChanged}" />
</h:selectOneMenu>
<h:outputText value="You selected: #{bean.selectedColor}" />
</h:form>
এখানে, f:ajax ট্যাগের মাধ্যমে valueChange ইভেন্ট ট্রিগার হচ্ছে এবং listener="#{bean.colorChanged}" এই ইভেন্ট হ্যান্ডলিংয়ের জন্য Managed Bean এর colorChanged পদ্ধতি নির্ধারণ করছে।
Managed Bean (ValueChangeListener):
@ManagedBean
@RequestScoped
public class ColorBean {
private String selectedColor;
public String getSelectedColor() {
return selectedColor;
}
public void setSelectedColor(String selectedColor) {
this.selectedColor = selectedColor;
}
public void colorChanged(ValueChangeEvent event) {
// নতুন মান পাওয়ার পর প্রক্রিয়া করা
String newColor = (String) event.getNewValue();
System.out.println("Color changed to: " + newColor);
// অন্যান্য লজিক, যেমন UI পরিবর্তন
}
}
এখানে:
ValueChangeEvent: এটি মান পরিবর্তনের ইভেন্ট, যার মাধ্যমে আপনি নতুন মান এবং পুরনো মান উভয়ই পেতে পারেন।event.getNewValue(): এটি নতুন মান দেয়, যা ইউজার সিলেক্ট করেছেন।
PhaseListener
PhaseListener একটি ইন্টারফেস যা JSF লাইফসাইকেলের বিভিন্ন পর্যায় পর্যবেক্ষণ করতে ব্যবহৃত হয়। JSF লাইফসাইকেল একাধিক পর্যায় বা phase নিয়ে গঠিত, যেমন Restore View, Apply Request Values, Process Validations, Update Model Values, এবং Render Response। PhaseListener এর মাধ্যমে আপনি এই পর্যায়গুলোতে কাস্টম আচরণ ইনজেক্ট করতে পারেন।
উদাহরণ: PhaseListener ব্যবহার করা
ধরা যাক, আপনি JSF লাইফসাইকেলের একটি নির্দিষ্ট পর্যায়ে লগিং বা অডিটিং করতে চান।
PhaseListener ইমপ্লিমেন্টেশন:
import javax.faces.event.PhaseEvent;
import javax.faces.event.PhaseId;
import javax.faces.event.PhaseListener;
public class CustomPhaseListener implements PhaseListener {
@Override
public void beforePhase(PhaseEvent event) {
// লাইফসাইকেলের একটি পর্যায়ের আগে কার্যকর হবে
System.out.println("Before phase: " + event.getPhaseId());
}
@Override
public void afterPhase(PhaseEvent event) {
// লাইফসাইকেলের একটি পর্যায়ের পরে কার্যকর হবে
System.out.println("After phase: " + event.getPhaseId());
}
@Override
public PhaseId getPhaseId() {
// যে পর্যায়গুলির জন্য Listener প্রযোজ্য হবে
return PhaseId.ANY_PHASE; // সমস্ত ফেজের জন্য প্রযোজ্য
}
}
এখানে:
- beforePhase(): এটি JSF লাইফসাইকেলের একটি পর্যায় শুরু হওয়ার আগে কার্যকর হয়।
- afterPhase(): এটি JSF লাইফসাইকেলের একটি পর্যায় শেষ হওয়ার পর কার্যকর হয়।
- getPhaseId(): এই মেথডের মাধ্যমে আপনি নির্দিষ্ট একটি Phase নির্বাচন করতে পারেন, যেমন
PhaseId.RESTORE_VIEW,PhaseId.APPLY_REQUEST_VALUES, ইত্যাদি।
PhaseListener রেজিস্ট্রেশন:
PhaseListener কে faces-config.xml ফাইলে রেজিস্টার করতে হয়।
<faces-config 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-facesconfig_2_0.xsd"
version="2.0">
<phase-listener>
<listener-class>com.example.CustomPhaseListener</listener-class>
</phase-listener>
</faces-config>
এখানে, CustomPhaseListener ক্লাসটি JSF অ্যাপ্লিকেশনটির লাইফসাইকেল পর্যায়গুলোর আগে এবং পরে কার্যকর হবে।
ValueChangeListener এবং PhaseListener এর মধ্যে পার্থক্য
| ব্যবহার | ValueChangeListener | PhaseListener |
|---|---|---|
| ফোকাস | UI উপাদানগুলির মান পরিবর্তন | JSF লাইফসাইকেলের বিভিন্ন পর্যায় পর্যবেক্ষণ |
| ইভেন্ট | মান পরিবর্তনের ইভেন্ট | লাইফসাইকেলের ফেজের আগে এবং পরে কার্যকর |
| ব্যবহার | একক মান পরিবর্তন ট্র্যাক করা | JSF লাইফসাইকেলের কোন পর্যায় কার্যকর হবে তা ট্র্যাক করা |
| ব্যবহার উদাহরণ | ইনপুট ফিল্ড বা ড্রপডাউন থেকে মান পরিবর্তন হ্যান্ডল করা | লগিং, অডিটিং বা লাইফসাইকেল কাস্টমাইজেশন |
সারাংশ
ValueChangeListener এবং PhaseListener JSF ফ্রেমওয়ার্কে দুটি গুরুত্বপূর্ণ ইন্টারফেস। ValueChangeListener ব্যবহারকারী ইনপুটের মান পরিবর্তন হলে ট্রিগার হয় এবং সেই পরিবর্তন হ্যান্ডল করার জন্য ব্যবহৃত হয়। অপরদিকে, PhaseListener JSF লাইফসাইকেলের বিভিন্ন পর্যায় পর্যবেক্ষণ করতে ব্যবহৃত হয়, যা আপনাকে লাইফসাইকেলের শুরু থেকে শেষ পর্যন্ত বিভিন্ন কার্যকলাপ ট্র্যাক এবং কাস্টমাইজ করার সুযোগ দেয়।
Read more