JSF অ্যাপ্লিকেশনে faces-config.xml একটি গুরুত্বপূর্ণ কনফিগারেশন ফাইল, যা JSF কনটেইনারকে বিভিন্ন সেটিংস এবং কনফিগারেশন প্রদান করে। এটি JSF অ্যাপ্লিকেশনটির বিভিন্ন দিক যেমন Managed Beans, নেভিগেশন রুল, ভ্যালিডেশন, কনভার্টার, এবং অন্যান্য ফিচার কনফিগার করার জন্য ব্যবহৃত হয়। faces-config.xml ফাইলটি সাধারণত WEB-INF ফোল্ডারে রাখা হয় এবং এটি JSF অ্যাপ্লিকেশনটির কনফিগারেশন কেন্দ্র হিসাবে কাজ করে।
faces-config.xml ফাইলের গঠন
faces-config.xml ফাইলের গঠন XML ভিত্তিক এবং এটি JSF কনফিগারেশন ডাটা ধারণ করে। JSF 2.0 এবং তার পরবর্তী সংস্করণগুলিতে, কিছু কনফিগারেশন faces-config.xml ফাইল থেকে সরিয়ে @ManagedBean, @ViewScoped, এবং অন্যান্য অ্যানোটেশন ব্যবহার করা হয়েছে, তবে এখনও কিছু কনফিগারেশন এখানে রাখতে হয়।
faces-config.xml ফাইলের মূল উপাদান
১. Managed Beans কনফিগারেশন
Managed Beans হল JavaBeans ক্লাস যা JSF এর মাধ্যমে পরিচালিত হয় এবং মডেল ডেটা ধারণ করে। faces-config.xml ফাইলে Managed Beans কনফিগার করা হয়।
<managed-bean>
<managed-bean-name>helloWorldBean</managed-bean-name>
<managed-bean-class>com.example.HelloWorldBean</managed-bean-class>
<managed-bean-scope>request</managed-bean-scope>
</managed-bean>
এখানে:
<managed-bean-name>: Managed Bean এর নাম।<managed-bean-class>: Managed Bean এর ক্লাস।<managed-bean-scope>: Managed Bean এর স্কোপ, যেমনrequest,session,application, ইত্যাদি।
২. নেভিগেশন রুল (Navigation Rules)
JSF অ্যাপ্লিকেশনের মধ্যে পেজের নেভিগেশন কনফিগার করতে faces-config.xml ফাইলে নেভিগেশন রুল নির্ধারণ করা হয়।
<navigation-rule>
<from-view-id>/home.xhtml</from-view-id>
<navigation-case>
<from-outcome>success</from-outcome>
<to-view-id>/welcome.xhtml</to-view-id>
</navigation-case>
</navigation-rule>
এখানে:
<from-view-id>: যেখানে থেকে নেভিগেট হবে।<from-outcome>: যে আউটপুটের উপর ভিত্তি করে নেভিগেশন হবে (যেমনsuccess,failure)।<to-view-id>: গন্তব্য পেজ।
৩. ফেসেস কনফিগ ফাইলের অন্যান্য উপাদান
- Converters: JSF এর কনভার্টার ব্যবহারের জন্য কনফিগারেশন।
- Validators: JSF এর ভ্যালিডেটর ব্যবহারের জন্য কনফিগারেশন।
<converter>
<converter-id>stringConverter</converter-id>
<converter-class>com.example.StringConverter</converter-class>
</converter>
<validator>
<validator-id>emailValidator</validator-id>
<validator-class>com.example.EmailValidator</validator-class>
</validator>
এখানে:
<converter-id>: কনভার্টারের আইডি।<converter-class>: কনভার্টারের ক্লাস।<validator-id>: ভ্যালিডেটরের আইডি।<validator-class>: ভ্যালিডেটরের ক্লাস।
৪. ইন্টারসেপ্টর স্ট্যাক (Interceptor Stack)
JSF ফ্রেমওয়ার্কে কাস্টম ইন্টারসেপ্টর স্ট্যাক কনফিগার করা সম্ভব, যা HTTP রিকোয়েস্ট প্রক্রিয়াকরণের আগে এবং পরে কার্যকর হয়।
<interceptor>
<interceptor-class>com.example.LoggingInterceptor</interceptor-class>
</interceptor>
এখানে:
<interceptor-class>: ইন্টারসেপ্টরের ক্লাস, যা রিকোয়েস্ট হ্যান্ডলিংয়ের সময় ব্যবহৃত হবে।
JSF 2.0 এবং এর পরবর্তী সংস্করণের উন্নতি
JSF 2.0 এবং পরবর্তী সংস্করণে, অনেক কনফিগারেশন এবং অ্যানোটেশন সমর্থন যুক্ত করা হয়েছে, যা faces-config.xml ফাইলের ব্যবহার কিছুটা কমিয়ে দিয়েছে। উদাহরণস্বরূপ, Managed Beans কনফিগারেশন এখন @ManagedBean এবং @SessionScoped অ্যানোটেশন দ্বারা করা যায়।
যদিও JSF 2.0 থেকে faces-config.xml এর ব্যবহার কমেছে, এটি এখনও অনেক পুরনো অ্যাপ্লিকেশন এবং নির্দিষ্ট কনফিগারেশন জন্য ব্যবহৃত হয়। JSF 2.0 থেকে, অন্যান্য কনফিগারেশনও যেমন কনভার্টার এবং ভ্যালিডেটর ক্লাসের জন্য অ্যানোটেশন ব্যবহারের মাধ্যমে এগুলির কনফিগারেশন করা সম্ভব।
উদাহরণ: একটি পূর্ণাঙ্গ faces-config.xml ফাইল
<?xml version="1.0" encoding="UTF-8"?>
<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">
<!-- Managed Bean -->
<managed-bean>
<managed-bean-name>helloWorldBean</managed-bean-name>
<managed-bean-class>com.example.HelloWorldBean</managed-bean-class>
<managed-bean-scope>request</managed-bean-scope>
</managed-bean>
<!-- Navigation Rule -->
<navigation-rule>
<from-view-id>/home.xhtml</from-view-id>
<navigation-case>
<from-outcome>success</from-outcome>
<to-view-id>/welcome.xhtml</to-view-id>
</navigation-case>
</navigation-rule>
<!-- Custom Converter -->
<converter>
<converter-id>stringConverter</converter-id>
<converter-class>com.example.StringConverter</converter-class>
</converter>
<!-- Custom Validator -->
<validator>
<validator-id>emailValidator</validator-id>
<validator-class>com.example.EmailValidator</validator-class>
</validator>
</faces-config>
সারাংশ
faces-config.xml JSF অ্যাপ্লিকেশনে কনফিগারেশনের জন্য একটি গুরুত্বপূর্ণ ফাইল। এটি JSF কনটেইনারকে Managed Beans, নেভিগেশন রুল, কনভার্টার, ভ্যালিডেটর এবং অন্যান্য ফিচার কনফিগার করার সুযোগ দেয়। JSF 2.0 থেকে অনেক কনফিগারেশন অ্যানোটেশন দ্বারা করা সম্ভব হলেও, faces-config.xml এখনও অনেক ক্ষেত্রেই ব্যবহৃত হয়, বিশেষত পুরনো অ্যাপ্লিকেশনগুলিতে।
faces-config.xml হল JSF অ্যাপ্লিকেশনগুলির একটি গুরুত্বপূর্ণ কনফিগারেশন ফাইল, যা JSF কনফিগারেশন এবং অ্যাপ্লিকেশনের বিভিন্ন অপশন সেটআপ করতে ব্যবহৃত হয়। এটি একটি XML ফাইল যা ফ্রেমওয়ার্কে কনফিগারেশনের জন্য প্রয়োজনীয় সব তথ্য ধারণ করে, যেমন ম্যানেজড বিইনস, ভিউ নেভিগেশন, লিসনার, কনভার্টার, এবং ভ্যালিডেটর ইত্যাদি।
faces-config.xml ফাইলের প্রধান ভূমিকা
faces-config.xml ফাইলের প্রধান উদ্দেশ্য হলো JSF অ্যাপ্লিকেশনের কনফিগারেশন এবং অন্যান্য উপাদানকে সঠিকভাবে সেটআপ করা। এটি JSF কনটেইনারকে জানায় কোন ম্যানেজড বিইনস, কনভার্টার, ভ্যালিডেটর বা অন্যান্য কম্পোনেন্ট ব্যবহার করা হবে এবং তাদের কিভাবে কাজ করতে হবে।
faces-config.xml ফাইলের প্রধান উপাদানসমূহ
১. Managed Beans
faces-config.xml ফাইলে Managed Beans কনফিগার করা হয়, যা JSF অ্যাপ্লিকেশনে ডেটা মডেল এবং ব্যবসায়িক লজিকের কাজ করে। এটি ডেভেলপারদের জন্য গুরুত্বপূর্ণ, কারণ এটি UI উপাদান এবং মডেল বা ডেটার মধ্যে সম্পর্ক তৈরি করে।
উদাহরণ:
<managed-bean>
<managed-bean-name>userBean</managed-bean-name>
<managed-bean-class>com.example.UserBean</managed-bean-class>
<managed-bean-scope>session</managed-bean-scope>
</managed-bean>
এখানে, userBean Managed Bean এর নাম এবং তার ক্লাস com.example.UserBean উল্লেখ করা হয়েছে। session স্কোপে থাকলে এটি ব্যবহারকারীর সেশন শেষ না হওয়া পর্যন্ত জীবিত থাকবে।
২. Navigation Rules
faces-config.xml ফাইলের মধ্যে ভিউ নেভিগেশন রুল কনফিগার করা হয়, যা এক পৃষ্ঠা থেকে অন্য পৃষ্ঠায় নেভিগেট করতে সহায়তা করে। এতে একটি URL প্যাটার্ন এবং সংশ্লিষ্ট ভিউ ফাইল উল্লেখ করা হয়।
উদাহরণ:
<navigation-rule>
<from-view-id>/home.xhtml</from-view-id>
<navigation-case>
<from-outcome>success</from-outcome>
<to-view-id>/welcome.xhtml</to-view-id>
</navigation-case>
</navigation-rule>
এখানে, যদি /home.xhtml থেকে success আউটকাম পাওয়া যায়, তাহলে এটি /welcome.xhtml পেজে নেভিগেট করবে।
৩. Converters
JSF ফ্রেমওয়ার্কে ডেটার রূপান্তর করতে কনভার্টার ব্যবহার করা হয়। faces-config.xml ফাইলে কাস্টম কনভার্টার কনফিগার করা হয়।
উদাহরণ:
<converter>
<converter-for-class>java.util.Date</converter-for-class>
<converter-class>com.example.DateConverter</converter-class>
</converter>
এখানে, java.util.Date ক্লাসের জন্য কাস্টম DateConverter কনভার্টার ব্যবহার করা হয়েছে।
৪. Validators
JSF তে ফর্ম ইনপুট ভ্যালিডেশন করার জন্য ভ্যালিডেটর ব্যবহার করা হয়। faces-config.xml ফাইলে কাস্টম ভ্যালিডেটর কনফিগার করা হয়।
উদাহরণ:
<validator>
<validator-id>customValidator</validator-id>
<validator-class>com.example.CustomValidator</validator-class>
</validator>
এখানে, customValidator নামক কাস্টম ভ্যালিডেটর ব্যবহার করা হয়েছে, যা com.example.CustomValidator ক্লাস দ্বারা পরিচালিত।
৫. Lifecycle Listeners
JSF লাইফসাইকেল ইভেন্টগুলির ওপর নজর রাখতে faces-config.xml ফাইলে লিসনার কনফিগার করা হয়। লিসনার একটি বিশেষ ক্লাস যা JSF লাইফসাইকেলের বিভিন্ন পর্যায়ে কল হয়, যেমন Application, Request, Session, বা Phase.
উদাহরণ:
<application>
<application-listener>
<listener-class>com.example.AppListener</listener-class>
</application-listener>
</application>
এখানে, com.example.AppListener ক্লাসটি লাইফসাইকেল ইভেন্টগুলি শোনার জন্য কনফিগার করা হয়েছে।
faces-config.xml ফাইলের কার্যকারিতা
- কনফিগারেশন এবং এক্সটেনশন:
faces-config.xmlফাইলের মাধ্যমে JSF কনফিগারেশন এবং এক্সটেনশন খুব সহজভাবে পরিচালিত হয়। এখানে আপনি Managed Beans, Validators, Converters ইত্যাদি কনফিগার করতে পারেন। - নেভিগেশন রুল: JSF অ্যাপ্লিকেশন গঠনের সময় এক পৃষ্ঠা থেকে অন্য পৃষ্ঠায় কীভাবে নেভিগেট করা হবে, তা
faces-config.xmlফাইলে নির্ধারণ করা হয়। - লাইফসাইকেল পরিচালনা: JSF এর বিভিন্ন পর্যায়ে কীভাবে ইভেন্টগুলো পরিচালিত হবে, তা
faces-config.xmlফাইলে নিয়ন্ত্রণ করা হয়। - কাস্টম লজিক: JSF ফ্রেমওয়ার্কের মধ্যে কাস্টম লজিক যুক্ত করতে
faces-config.xmlফাইলে কাস্টম কনভার্টার এবং ভ্যালিডেটর ব্যবহার করা হয়।
JSF 2.0 এর পর faces-config.xml ফাইলের পরিবর্তন
JSF 2.0 এ একটি বড় পরিবর্তন এসেছে, কারণ এটি CDI (Contexts and Dependency Injection) এর সাথে সঙ্গতিপূর্ণ হয়েছে এবং অনেক কনফিগারেশন ম্যানেজমেন্ট @ManagedBean অ্যানোটেশনের মাধ্যমে করা যায়। এর ফলে, faces-config.xml ফাইলের প্রয়োজনীয়তা কিছুটা কমে গেছে। তবে এখনও JSF অ্যাপ্লিকেশনগুলির জন্য এটি গুরুত্বপূর্ণ, বিশেষ করে যদি কাস্টম কনফিগারেশন বা অ্যাডভান্সড সেটআপ প্রয়োজন হয়।
সারাংশ
faces-config.xml ফাইলটি JSF অ্যাপ্লিকেশনের জন্য একটি গুরুত্বপূর্ণ কনফিগারেশন ফাইল। এটি ম্যানেজড বিইনস, নেভিগেশন রুল, কনভার্টার, ভ্যালিডেটর, এবং লাইফসাইকেল লিসনারের মতো বিভিন্ন ফিচারের কনফিগারেশন সেটআপ করার জন্য ব্যবহৃত হয়। JSF 2.0 এর পর কিছু ফিচার CDI (Contexts and Dependency Injection) দ্বারা প্রতিস্থাপিত হলেও, এটি এখনও জটিল অ্যাপ্লিকেশনের জন্য গুরুত্বপূর্ণ।
JSF (JavaServer Faces) ফ্রেমওয়ার্কে Managed Beans এমন JavaBeans যা JSF কনটেইনার দ্বারা পরিচালিত হয় এবং ব্যবহারকারীর ইনপুট গ্রহণ, ব্যবসায়িক লজিক পরিচালনা, এবং UI উপাদানগুলির সাথে ডেটা বিনিময় করার জন্য ব্যবহৃত হয়। Managed Bean কনফিগারেশন হল সেই প্রক্রিয়া যার মাধ্যমে আপনি Managed Bean তৈরি করেন এবং সেগুলিকে JSF কনটেইনারের সাথে যুক্ত করেন, যাতে সেগুলি কার্যকরীভাবে পরিচালিত হতে পারে।
Managed Bean কনফিগারেশন সাধারণত দুইভাবে করা যায়: অ্যানোটেশন ব্যবহার করে এবং faces-config.xml ফাইলের মাধ্যমে।
Managed Bean কনফিগারেশন: অ্যানোটেশন ব্যবহার করে
JSF 2.0 থেকে Managed Beans কনফিগার করার জন্য অ্যানোটেশন ব্যবহার করা যেতে পারে, যা কোডের মধ্যে সরাসরি ব্যবহৃত হয়। এর ফলে কনফিগারেশন আরও সহজ এবং পরিষ্কার হয়ে ওঠে।
Managed Bean তৈরি ও কনফিগারেশন (অ্যানোটেশন)
Managed Beans সাধারণত @ManagedBean অ্যানোটেশন দিয়ে চিহ্নিত করা হয়। তবে, JSF 2.0 এ @Named অ্যানোটেশন ব্যবহৃত হয়, যা CDI (Contexts and Dependency Injection) এর সাথে সামঞ্জস্যপূর্ণ এবং অধিক নমনীয়তা প্রদান করে।
Managed Bean উদাহরণ:
import javax.inject.Named;
import javax.enterprise.context.SessionScoped;
import java.io.Serializable;
@Named
@SessionScoped
public class UserBean implements Serializable {
private String username;
// Getter এবং Setter
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
// ব্যাবসায়িক লজিক
public String submit() {
return "welcome";
}
}
এখানে @Named অ্যানোটেশনটি Managed Bean হিসেবে UserBean ক্লাসটি চিহ্নিত করে এবং @SessionScoped অ্যানোটেশনটি নিশ্চিত করে যে এটি একটি সেশন স্কোপে চলবে, অর্থাৎ ব্যবহারকারীর সেশন জীবন্ত থাকা পর্যন্ত এই Bean সক্রিয় থাকবে। Serializable ইন্টারফেস ইমপ্লিমেন্ট করা হয় যাতে Managed Beanটি সেশন স্কোপে সংরক্ষিত হতে পারে।
Managed Bean কনফিগারেশন: faces-config.xml ফাইলের মাধ্যমে
JSF 1.x এ Managed Beans কনফিগার করতে faces-config.xml ফাইল ব্যবহার করা হতো, তবে JSF 2.0 থেকে অ্যানোটেশন ব্যবহারের প্রচলন বেশি। তবুও, কিছু পরিস্থিতিতে faces-config.xml ফাইল ব্যবহার করা যেতে পারে।
faces-config.xml ফাইলের মাধ্যমে Managed Bean কনফিগারেশন উদাহরণ:
<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">
<managed-bean>
<managed-bean-name>UserBean</managed-bean-name>
<managed-bean-class>com.example.UserBean</managed-bean-class>
<managed-bean-scope>session</managed-bean-scope>
</managed-bean>
</faces-config>
এখানে faces-config.xml ফাইলে Managed Bean কনফিগার করা হয়েছে। managed-bean-name হল Bean এর নাম, যা JSF পেজে ব্যবহার করা হবে। managed-bean-class এ Bean এর পূর্ণ ক্লাস নাম দেওয়া হয় এবং managed-bean-scope দ্বারা Bean এর স্কোপ নির্ধারণ করা হয়। উপরের উদাহরণে এটি session স্কোপে কনফিগার করা হয়েছে।
Managed Bean এর স্কোপ
Managed Beans এর স্কোপ JSF কনটেইনার দ্বারা নির্ধারিত হয় এবং এটি তাদের জীবনকাল ও ব্যবহারের সময়কালের সাথে সম্পর্কিত। JSF এর মধ্যে সাধারণত চারটি স্কোপ ব্যবহৃত হয়:
- Request Scope (অনুরোধ স্কোপ): Managed Bean শুধুমাত্র এক HTTP রিকোয়েস্টের জন্য জীবিত থাকে এবং পরবর্তী রিকোয়েস্টে ধ্বংস হয়ে যায়।
- Session Scope (সেশন স্কোপ): Managed Bean ব্যবহারকারীর সেশন জীবন্ত থাকা পর্যন্ত চালু থাকে।
- Application Scope (অ্যাপ্লিকেশন স্কোপ): Managed Bean অ্যাপ্লিকেশন শুরু থেকে শেষ পর্যন্ত জীবিত থাকে।
- View Scope (ভিউ স্কোপ): Managed Bean JSF পেজের ভিউ (যেমন ফরম) রেন্ডার হওয়ার সময় থেকে জীবিত থাকে এবং পেজ রিফ্রেশ না হওয়া পর্যন্ত।
Managed Bean কনফিগারেশনে CDI (Contexts and Dependency Injection)
JSF 2.0 এ CDI (Contexts and Dependency Injection) এর সমর্থন যুক্ত করা হয়েছে, যার মাধ্যমে আপনি আরো শক্তিশালী এবং নমনীয় Managed Bean কনফিগারেশন করতে পারেন। এর মাধ্যমে আপনি Dependency Injection, Event Handling এবং Scoped Beans-এর সুবিধা লাভ করতে পারেন।
@Inject অ্যানোটেশনটি আপনাকে সহজে Managed Beans ইনজেক্ট করতে সাহায্য করে। উদাহরণস্বরূপ:
import javax.inject.Inject;
import javax.enterprise.context.RequestScoped;
import javax.inject.Named;
@Named
@RequestScoped
public class UserBean {
@Inject
private UserService userService;
// ব্যাবসায়িক লজিক
}
এখানে @Inject অ্যানোটেশন ব্যবহার করা হয়েছে UserService ক্লাস ইনজেক্ট করার জন্য, যা CDI এর সাহায্যে Managed Bean এ Inject হয়ে গেছে।
Managed Bean কনফিগারেশন এর সুবিধা
- কোডের পরিষ্কারতা: অ্যানোটেশন ব্যবহারের মাধ্যমে কোড আরও সহজ, পরিষ্কার এবং সহজে পড়া যায়।
- বিকল্প কনফিগারেশন: Faces-config.xml এবং অ্যানোটেশন ব্যবহারের মাধ্যমে দুইভাবে Managed Beans কনফিগার করা যায়, যা ডেভেলপারদের সুবিধা প্রদান করে।
- Scoped Beans: Managed Beans এর স্কোপ সঠিকভাবে কনফিগার করার মাধ্যমে অ্যাপ্লিকেশনটির কার্যক্ষমতা এবং ব্যবস্থাপনা সহজ করা যায়।
সারাংশ
JSF Managed Beans কনফিগারেশন দুটি প্রধান পদ্ধতিতে করা যায়—অ্যানোটেশন ব্যবহার করে অথবা faces-config.xml ফাইলের মাধ্যমে। JSF 2.0 এর পর অ্যানোটেশন ব্যবহারের প্রচলন বেড়েছে, যা কোডকে পরিষ্কার ও কার্যকরী করে তোলে। Managed Beans এর স্কোপ নির্ধারণের মাধ্যমে বিভিন্ন জীবনকাল নির্ধারণ করা যায়, যেমন request, session, application, এবং view স্কোপ। JSF Managed Beans এবং CDI ব্যবহারের মাধ্যমে শক্তিশালী এবং নমনীয় ওয়েব অ্যাপ্লিকেশন ডেভেলপ করা সম্ভব।
JavaServer Faces (JSF) অ্যাপ্লিকেশনগুলিতে পেজ নেভিগেশন একটি গুরুত্বপূর্ণ অংশ। এটি ব্যবহৃত হয় বিভিন্ন পৃষ্ঠার মধ্যে ইউজারের নেভিগেশন (পেজ থেকে পেজ) পরিচালনা করতে। JSF-এ পেজ নেভিগেশন কনফিগারেশন সাধারণত faces-config.xml ফাইলে করা হয়, তবে JSF 2.0 থেকে annotation-based নেভিগেশনও ব্যবহার করা যায়, যা অনেক সহজ ও নমনীয়।
JSF পেজ নেভিগেশন কনফিগারেশন
JSF অ্যাপ্লিকেশনগুলোতে পেজ নেভিগেশন কনফিগারেশন সাধারণত দুটি ধরনের হতে পারে:
- XML কনফিগারেশন (faces-config.xml)
- Annotation-based কনফিগারেশন (JSF 2.0 onwards)
১. XML কনফিগারেশন (faces-config.xml)
faces-config.xml ফাইলে আপনি পেজ নেভিগেশন কনফিগারেশন করতে পারেন। এখানে আপনাকে navigation-rule নামক একটি এলিমেন্ট ব্যবহার করতে হয়, যা পেজের মধ্যে নেভিগেশন রুল নির্দেশ করে।
faces-config.xml এর কনফিগারেশন:
<?xml version="1.0" encoding="UTF-8"?>
<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">
<!-- Navigation Rule -->
<navigation-rule>
<from-view-id>/home.xhtml</from-view-id>
<navigation-case>
<from-outcome>goToPage1</from-outcome>
<to-view-id>/page1.xhtml</to-view-id>
</navigation-case>
<navigation-case>
<from-outcome>goToPage2</from-outcome>
<to-view-id>/page2.xhtml</to-view-id>
</navigation-case>
</navigation-rule>
</faces-config>
এখানে /home.xhtml থেকে দুইটি ভিন্ন outcome দিয়ে নেভিগেট করা যেতে পারে:
goToPage1outcome হলে ব্যবহারকারী/page1.xhtmlতে নেভিগেট করবে।goToPage2outcome হলে/page2.xhtmlতে নেভিগেট করবে।
নেভিগেশন কনফিগারেশন ব্যাখ্যা:
- from-view-id: এটি নির্ধারণ করে যে কোন পেজ থেকে নেভিগেট হবে।
- from-outcome: এটি হলো সেই outcome যা ডেভেলপার বা অ্যাপ্লিকেশন থেকে নির্ধারিত হয়।
- to-view-id: এটি হলো যে পেজে নেভিগেট করা হবে।
২. Annotation-based কনফিগারেশন (JSF 2.0 onwards)
JSF 2.0 এবং পরবর্তী সংস্করণে, annotation ব্যবহার করে নেভিগেশন কনফিগার করা যেতে পারে। এখানে @ManagedBean এবং @NavigationCase অ্যানোটেশন ব্যবহার করা হয়, যা পেজ নেভিগেশন সহজ এবং আরও নমনীয় করে তোলে।
JSF Managed Bean এবং নেভিগেশন উদাহরণ:
import javax.faces.bean.ManagedBean;
@ManagedBean
public class NavigationBean {
public String goToPage1() {
return "goToPage1"; // outcome যা faces-config.xml তে কনফিগার করা
}
public String goToPage2() {
return "goToPage2"; // outcome যা faces-config.xml তে কনফিগার করা
}
}
এখন .xhtml পেজে Navigation ব্যবহার করা:
<h:form>
<h:commandButton value="Go to Page 1" action="#{navigationBean.goToPage1}" />
<h:commandButton value="Go to Page 2" action="#{navigationBean.goToPage2}" />
</h:form>
এখানে, navigationBean.goToPage1() এবং navigationBean.goToPage2() পদ্ধতিগুলি প্রতিটি বাটনের জন্য outcome প্রদান করবে এবং সেই অনুযায়ী নেভিগেশন করবে। যদি goToPage1 outcome থাকে, এটি /page1.xhtml তে নেভিগেট করবে এবং goToPage2 outcome হলে /page2.xhtml তে নেভিগেট করবে।
Outcome এবং Redirect
JSF নেভিগেশন Outcome দুটি ধরনের হতে পারে:
- Forward Outcome – যখন আপনি outcome ফেরত দেন, এটি ফর্মের পরবর্তী পৃষ্ঠায় রিডিরেক্ট না করে সরাসরি পৃষ্ঠার ভিউ আপডেট করবে।
- Redirect Outcome – যদি আপনি outcome-এর সাথে
redirect=trueযুক্ত করেন, তাহলে এটি ব্রাউজারকে নতুন URL এ রিডিরেক্ট করবে।
Redirect outcome কনফিগারেশন:
public String goToPage3() {
return "page3.xhtml?faces-redirect=true"; // Reroutes the request to page3.xhtml
}
এখানে, faces-redirect=true outcome যুক্ত করা হলে এটি নতুন পৃষ্ঠায় রিডিরেক্ট করবে, যা URL পরিবর্তন করবে।
সারাংশ
JSF এ পেজ নেভিগেশন কনফিগারেশন দুইটি মূল পদ্ধতিতে করা যায়:
- XML কনফিগারেশন:
faces-config.xmlফাইলেnavigation-ruleব্যবহার করে, যা অ্যাপ্লিকেশনের পেজ নেভিগেশন নিয়ম কনফিগার করতে সহায়তা করে। - Annotation-based কনফিগারেশন (JSF 2.0 onwards):
@ManagedBeanএবং@NavigationCaseঅ্যানোটেশন ব্যবহার করে, যা পেজ নেভিগেশনকে আরও সহজ এবং নমনীয় করে তোলে।
উল্লেখযোগ্য যে, JSF নেভিগেশন outcomes, ফরম অ্যাকশন, এবং URL রিডিরেকশনসহ খুবই ক্ষমতাশালী এবং flexible, যা ডেভেলপারদের পেজ নেভিগেশন কনফিগারেশন করার ক্ষেত্রে প্রচুর সুবিধা প্রদান করে।
JSF (JavaServer Faces) ফ্রেমওয়ার্কে Managed Beans গুলি JavaBeans ধরনের ক্লাস, যা বিভিন্ন স্কোপে কাজ করতে পারে। Application-scoped এবং Session-scoped Managed Beans দুটি গুরুত্বপূর্ণ স্কোপ, যেগুলি অ্যাপ্লিকেশনের স্থায়িত্ব এবং ব্যবহারকারীর সেশন অনুযায়ী ব্যবস্থাপনা করে।
Managed Beans কি?
Managed Beans হল JavaBeans যা JSF কনটেইনার দ্বারা পরিচালিত হয় এবং ইউজারের ইনপুট গ্রহণ, ডেটা প্রসেসিং এবং নেভিগেশন পরিচালনা করতে ব্যবহৃত হয়। JSF Managed Beans সাধারণত বিভিন্ন স্কোপে কাজ করতে পারে, যার মধ্যে Application, Session, Request, এবং View স্কোপ অন্যতম। এই স্কোপগুলি Managed Beans এর জীবনকাল এবং কার্যক্ষমতা নির্ধারণ করে।
Application-scoped Managed Beans
Application-scoped Managed Beans এমন একটি Managed Bean যা পুরো অ্যাপ্লিকেশনের জন্য তৈরি হয় এবং অ্যাপ্লিকেশন জীবিত থাকা পর্যন্ত সক্রিয় থাকে। এর মানে হলো, একটি Application-scoped Managed Bean একবার অ্যাপ্লিকেশন শুরু হলে তা শেষ হওয়া পর্যন্ত জীবিত থাকে এবং সমস্ত ব্যবহারকারীর জন্য শেয়ার করা হয়।
বৈশিষ্ট্যসমূহ:
- অ্যাপ্লিকেশন জুড়ে স্থায়ী: যখন অ্যাপ্লিকেশন চালু হয়, তখন এই Managed Bean তৈরি হয় এবং অ্যাপ্লিকেশন বন্ধ না হওয়া পর্যন্ত জীবিত থাকে।
- শেয়ারড ডেটা: এটি সাধারণত শেয়ারড ডেটা বা কনফিগারেশন ভ্যালু সংরক্ষণ করতে ব্যবহৃত হয়, যা অ্যাপ্লিকেশনের মধ্যে একাধিক ব্যবহারকারী এবং সেশনে একত্রিত থাকে।
- নির্দিষ্ট ব্যবহারের ক্ষেত্রে: এই স্কোপ ব্যবহৃত হয় যখন আপনি চান যে একটি Managed Bean একাধিক ব্যবহারকারীর সেশন ধরে চলুক এবং সেই ডেটা অ্যাপ্লিকেশন জুড়ে সবার জন্য অ্যাক্সেসযোগ্য হোক।
উদাহরণ:
import javax.faces.bean.ApplicationScoped;
import javax.faces.bean.ManagedBean;
@ManagedBean
@ApplicationScoped
public class ApplicationBean {
private String appData = "Application-level data";
public String getAppData() {
return appData;
}
public void setAppData(String appData) {
this.appData = appData;
}
}
এখানে, ApplicationBean একটি Application-scoped Managed Bean হিসেবে চিহ্নিত হয়েছে। এটি অ্যাপ্লিকেশন জুড়ে শেয়ারড ডেটা ধারণ করবে এবং অ্যাপ্লিকেশন চলাকালীন সময় পর্যন্ত জীবিত থাকবে।
Session-scoped Managed Beans
Session-scoped Managed Beans এমন একটি Managed Bean যা একটি ব্যবহারকারীর HTTP সেশনের জন্য তৈরি হয় এবং ব্যবহারকারী সেশনটি বন্ধ না হওয়া পর্যন্ত জীবিত থাকে। এটি সাধারণত ব্যবহারকারীর সাথে সম্পর্কিত ডেটা, যেমন লগইন তথ্য বা কাস্টমাইজড ইউজার প্রেফারেন্স সংরক্ষণ করতে ব্যবহৃত হয়।
বৈশিষ্ট্যসমূহ:
- ব্যবহারকারীর সেশন অনুযায়ী স্থায়ী: এটি একমাত্র ওই ব্যবহারকারীকে সম্পর্কিত ডেটা প্রদান করে, এবং ব্যবহারকারী সেশনটি বন্ধ না হওয়া পর্যন্ত স্থায়ী থাকে।
- ব্যক্তিগত ডেটা সংরক্ষণ: এই স্কোপ ব্যবহারকারীর ব্যক্তিগত ডেটা সংরক্ষণের জন্য উপযুক্ত, যেমন ইউজারের লগইন তথ্য, শপিং কার্টের ডেটা ইত্যাদি।
- একই সেশনে একাধিক রিকোয়েস্ট: এটি ব্যবহারকারীর একাধিক রিকোয়েস্টে শেয়ারড ডেটা প্রদান করে।
উদাহরণ:
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
@ManagedBean
@SessionScoped
public class UserSessionBean {
private String username;
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
}
এখানে, UserSessionBean একটি Session-scoped Managed Bean হিসেবে চিহ্নিত হয়েছে। এটি শুধুমাত্র ওই ব্যবহারকারীর সেশন অনুযায়ী ডেটা ধারণ করবে এবং ব্যবহারকারী সেশনটি বন্ধ না হওয়া পর্যন্ত জীবিত থাকবে।
Application-scoped এবং Session-scoped Managed Beans এর মধ্যে পার্থক্য
| বৈশিষ্ট্য | Application-scoped Managed Beans | Session-scoped Managed Beans |
|---|---|---|
| জীবনকাল | অ্যাপ্লিকেশন চলাকালীন সময় পর্যন্ত | ব্যবহারকারীর সেশন চলাকালীন সময় পর্যন্ত |
| ডেটা শেয়ারিং | সমস্ত ব্যবহারকারীর মধ্যে শেয়ার করা হয় | শুধুমাত্র এক ব্যবহারকারীর মধ্যে শেয়ার করা হয় |
| ব্যবহার | কনফিগারেশন বা সাধারণ শেয়ারড ডেটা সংরক্ষণ | ব্যবহারকারীর প্রাইভেট ডেটা বা সেশন-ভিত্তিক তথ্য |
| উদাহরণ | অ্যাপ্লিকেশন-স্তরের ডেটা (যেমন অ্যাপ্লিকেশন কনফিগারেশন) | ইউজার লগইন ডেটা বা শপিং কার্ট |
সারাংশ
JSF Managed Beans এর Application-scoped এবং Session-scoped ব্যবহারের মাধ্যমে আপনি আপনার অ্যাপ্লিকেশনের ডেটা এবং ইউজার সেশনকে যথাযথভাবে ম্যানেজ করতে পারেন। Application-scoped Managed Beans পুরো অ্যাপ্লিকেশনের জন্য শেয়ারড ডেটা সরবরাহ করে, যেখানে Session-scoped Managed Beans শুধুমাত্র নির্দিষ্ট একটি ব্যবহারকারীর সেশন সম্পর্কিত ডেটা পরিচালনা করে। এই স্কোপ ব্যবহারের মাধ্যমে আপনি আপনার অ্যাপ্লিকেশনকে আরও কার্যকর, স্কেলেবল এবং ব্যবহারকারী-বান্ধব করে তুলতে পারেন।
Read more