JavaServer Faces (JSF) ফ্রেমওয়ার্কে ফর্ম এবং ফর্ম প্রসেসিং অত্যন্ত গুরুত্বপূর্ণ ভূমিকা পালন করে, কারণ এর মাধ্যমে ব্যবহারকারীর ইনপুট গ্রহণ এবং সেই ইনপুটকে ব্যাকএন্ডে প্রক্রিয়া করা হয়। JSF ফ্রেমওয়ার্কের সাহায্যে ফর্ম তৈরি করা সহজ এবং ডাইনামিক, এবং বিভিন্ন ইনপুট ভ্যালিডেশন ও সাবমিশন ফিচার ব্যবহার করে কার্যকরভাবে ডেটা প্রক্রিয়াকরণ করা যায়।
JSF ফর্ম কি?
JSF ফর্ম হল একটি UI কম্পোনেন্ট যা ব্যবহারকারীর ইনপুট গ্রহণ করে। এটি h:form ট্যাগ ব্যবহার করে তৈরি করা হয়। h:form একটি মূল উপাদান হিসেবে কাজ করে, যার মধ্যে বিভিন্ন ইনপুট ফিল্ড এবং বাটন থাকে। ফর্মের ডেটা value অ্যাট্রিবিউটের মাধ্যমে Managed Bean বা মডেল ডেটার সাথে যুক্ত থাকে।
ফর্ম তৈরির উদাহরণ:
<h:form>
<h:outputLabel for="username" value="Username: " />
<h:inputText id="username" value="#{userBean.username}" required="true" />
<h:outputLabel for="password" value="Password: " />
<h:inputSecret id="password" value="#{userBean.password}" required="true" />
<h:commandButton value="Submit" action="#{userBean.submit}" />
</h:form>
এখানে:
h:formহল ফর্মের মূল কম্পোনেন্ট।h:inputTextএবংh:inputSecretইনপুট ফিল্ডের জন্য ব্যবহৃত হয়েছে।h:commandButtonএকটি বাটন তৈরি করেছে, যা ব্যবহারকারীর ইনপুট সাবমিট করার জন্য ব্যবহৃত হয়।required="true"অ্যাট্রিবিউটটি ইনপুট ফিল্ডের জন্য ভ্যালিডেশন নিশ্চিত করে, অর্থাৎ ইউজারকে অবশ্যই মান প্রদান করতে হবে।
ফর্ম প্রসেসিং
JSF ফ্রেমওয়ার্কে, ফর্মের ডেটা সাবমিট করার পর ফর্ম প্রসেসিং হয়। ফর্মের ডেটা Managed Bean বা Backing Bean এ পাঠানো হয়, যেখানে ডেটা প্রক্রিয়া করা হয় এবং পরবর্তী অ্যাকশন (যেমন, ডেটাবেসে সেভ, ভ্যালিডেশন, বা পৃষ্ঠায় রিডাইরেকশন) সম্পন্ন হয়। ফর্ম প্রসেসিং সাধারণত action বা actionListener মেথডের মাধ্যমে পরিচালিত হয়।
ফর্ম ডেটা প্রসেস করার উদাহরণ:
import javax.faces.bean.ManagedBean;
@ManagedBean
public class UserBean {
private String username;
private String password;
// Getter and Setter
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;
}
// Submit action method
public String submit() {
// ডেটা প্রক্রিয়া বা ভ্যালিডেশন
if ("admin".equals(username) && "password".equals(password)) {
return "home"; // লগইন সফল হলে পরবর্তী পেজ
} else {
return "error"; // লগইন ব্যর্থ হলে error পেজ
}
}
}
এখানে:
submitমেথডটিusernameএবংpasswordএর মান চেক করে।- যদি মান সঠিক হয়, তাহলে ব্যবহারকারীকে "home" পেজে পাঠানো হয়, অন্যথায় "error" পেজে রিডাইরেক্ট করা হয়।
ফর্মের ভ্যালিডেশন
JSF ফ্রেমওয়ার্কে, ফর্ম ইনপুটের জন্য ভ্যালিডেশন প্রক্রিয়াও সহজ করা হয়েছে। আপনি Built-in Validation এবং Custom Validation ব্যবহার করতে পারেন।
Built-in Validation উদাহরণ:
<h:form>
<h:outputLabel for="email" value="Email: " />
<h:inputText id="email" value="#{userBean.email}" required="true">
<f:validateRegex pattern="^[a-zA-Z0-9_+&*-]+(?:\\.[a-zA-Z0-9_+&*-]+)*@(?:[a-zA-Z0-9-]+\\.)+[a-zA-Z]{2,7}$" />
</h:inputText>
<h:commandButton value="Submit" action="#{userBean.submit}" />
</h:form>
এখানে:
f:validateRegexট্যাগ ব্যবহার করে, ইমেইল ইনপুটের জন্য রেগুলার এক্সপ্রেশন ভ্যালিডেশন করা হয়েছে।required="true"অ্যাট্রিবিউটটি নিশ্চিত করে যে, ইনপুট ফিল্ডে ডেটা থাকা উচিত।
Custom Validation উদাহরণ:
import javax.faces.application.FacesMessage;
import javax.faces.context.FacesContext;
import javax.faces.validator.Validator;
import javax.faces.validator.ValidationException;
import javax.faces.bean.ManagedBean;
@ManagedBean
public class UserBean {
private String email;
// Getter and Setter
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
// Custom Email Validator
public void validateEmail(FacesContext context, javax.faces.component.UIComponent component, Object value) throws ValidationException {
String email = (String) value;
if (!email.contains("@")) {
FacesMessage message = new FacesMessage("Invalid Email");
context.addMessage(null, message);
throw new ValidationException("Email must contain @");
}
}
public String submit() {
// ফর্ম ডেটা প্রসেসিং
return "home";
}
}
এখানে:
validateEmailমেথডটি কাস্টম ভ্যালিডেশন সম্পাদন করে, যেখানে ইমেইল অ্যাড্রেসে@চিহ্ন থাকা নিশ্চিত করা হয়।- যদি ইনপুট ভ্যালিড না হয়, তবে একটি ValidationException ছুঁড়ে ফেলা হয় এবং ব্যবহারকারীকে একটি মেসেজ দেখানো হয়।
AJAX দিয়ে ফর্ম সাবমিশন
JSF ফ্রেমওয়ার্কে AJAX এর মাধ্যমে ফর্ম সাবমিট করা যেতে পারে, যা পেজ রিফ্রেশ ছাড়াই ফর্মের ডেটা সাবমিট এবং প্রক্রিয়া করার সুযোগ দেয়।
<h:form>
<h:inputText value="#{userBean.username}" />
<h:commandButton value="Submit" action="#{userBean.submit}">
<f:ajax execute="@form" render="@form" />
</h:commandButton>
</h:form>
এখানে:
f:ajaxট্যাগ ব্যবহার করে ফর্মের ডেটা সাবমিট করা হচ্ছে AJAX এর মাধ্যমে।execute="@form"ফর্মের সমস্ত ইনপুট কম্পোনেন্টকে সাবমিট করে।render="@form"পেজের ফর্মের সমস্ত অংশ পুনরায় রেন্ডার করবে।
সারাংশ
JSF ফ্রেমওয়ার্কের ফর্ম এবং ফর্ম প্রসেসিং শক্তিশালী এবং নমনীয়। আপনি সহজেই ইনপুট ফিল্ড তৈরি করতে পারেন এবং ডেটা ভ্যালিডেশন, সাবমিশন, এবং নেভিগেশন কনফিগার করতে পারেন। AJAX সহ JSF ফর্ম ব্যবহারের মাধ্যমে আপনি পেজ রিফ্রেশ ছাড়াই ডাইনামিক ওয়েব পেজ তৈরি করতে পারেন, যা ইউজারের অভিজ্ঞতা উন্নত করে।
JSF (JavaServer Faces) ফ্রেমওয়ার্কে ফর্মের মাধ্যমে ডেটা সাবমিশন একটি সাধারণ এবং গুরুত্বপূর্ণ কার্যকলাপ, যা ব্যবহারকারীর ইনপুট গ্রহণ এবং সার্ভারে প্রক্রিয়া করার জন্য ব্যবহৃত হয়। JSF এর ফর্ম কম্পোনেন্টগুলি ব্যবহারকারীর ডেটা সংগ্রহ করতে এবং সেই ডেটা প্রক্রিয়া করার জন্য Managed Bean-এ প্রেরণ করতে সাহায্য করে। এখানে আমরা দেখবো কিভাবে JSF ফর্ম তৈরি করা যায় এবং ব্যবহারকারীর ইনপুট সার্ভারে সাবমিট করা যায়।
JSF ফর্মের মাধ্যমে ডেটা সাবমিশনের মৌলিক কাঠামো
JSF ফর্ম সাধারণত <h:form> ট্যাগ দিয়ে তৈরি করা হয়। এই ফর্মে একাধিক ইনপুট কম্পোনেন্ট (যেমন টেক্সট ফিল্ড, রেডিও বাটন, চেকবক্স) এবং একটি কম্পোনেন্ট (যেমন সাবমিট বাটন) থাকতে পারে, যা ব্যবহারকারীর ইনপুট গ্রহণ করে এবং ফর্ম সাবমিট করে।
JSF ফর্মের মৌলিক উদাহরণ
এখানে একটি সাধারণ JSF ফর্মের উদাহরণ দেওয়া হলো, যেখানে একটি ব্যবহারকারীর নাম ইনপুট নেওয়া হচ্ছে এবং সেই ইনপুট Managed Bean এ প্রেরণ করা হচ্ছে।
JSF পেজ (XHTML):
<h:form>
<h:outputLabel for="username" value="Enter your name:" />
<h:inputText value="#{userBean.username}" id="username" />
<h:commandButton value="Submit" action="#{userBean.submit}" />
</h:form>
এখানে:
<h:form>: এটি JSF ফর্ম ট্যাগ, যা ব্যবহারকারীর ইনপুট গ্রহণের জন্য প্রয়োজন।<h:inputText>: এটি একটি ইনপুট টেক্সট ফিল্ড, যা ব্যবহারকারীর নাম গ্রহণ করবে।value="#{userBean.username}"ব্যবহার করে Managed Bean এর প্রোপার্টিusernameএর সাথে বাইন্ডিং করা হচ্ছে।<h:commandButton>: এটি একটি কম্পোনেন্ট যা ব্যবহারকারীকে ফর্ম সাবমিট করার জন্য "Submit" বাটন তৈরি করবে।action="#{userBean.submit}"ব্যবহার করে Managed Bean এরsubmitমেথড কল করা হবে।
Managed Bean (Java):
import javax.faces.bean.ManagedBean;
import javax.faces.bean.RequestScoped;
@ManagedBean
@RequestScoped
public class UserBean {
private String username;
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String submit() {
// বিজনেস লজিক বা ডেটা প্রক্রিয়া
System.out.println("User's name: " + username);
return "success"; // ফর্ম সাবমিট হওয়ার পর নেভিগেট করা হবে
}
}
এখানে:
usernameহল Managed Bean এর প্রোপার্টি, যা ফর্ম থেকে ইনপুট গ্রহণ করবে।submit()মেথডটি ফর্ম সাবমিট হলে কল হবে এবং ইনপুট ডেটা প্রক্রিয়া করবে। এখানে আমরা কেবলSystem.out.printlnদিয়ে নামটি প্রদর্শন করছি।return "success";নেভিগেশন রুলের মাধ্যমে পরবর্তী পৃষ্ঠায় নেভিগেট করবে।
faces-config.xml কনফিগারেশন (অপশনাল):
<navigation-rule>
<from-view-id>/index.xhtml</from-view-id>
<navigation-case>
<from-outcome>success</from-outcome>
<to-view-id>/success.xhtml</to-view-id>
</navigation-case>
</navigation-rule>
এখানে:
success.xhtmlএকটি নতুন পৃষ্ঠা হবে যা ফর্ম সাবমিট করার পর রিডাইরেক্ট করবে।
JSF ফর্মের মাধ্যমে ডেটা সাবমিশনের কাজের প্রক্রিয়া
- ফর্ম ইনপুট:
- ব্যবহারকারী
h:inputTextফিল্ডে একটি মান (যেমন নাম) প্রদান করে এবং তারপর "Submit" বাটনে ক্লিক করেন।
- ব্যবহারকারী
- ডেটা সাবমিট:
- ক্লিক করার সাথে সাথে JSF ফর্মটি Managed Bean এর
submit()মেথডে ইনপুট ডেটা প্রেরণ করে। এই মেথডটি Java ক্লাসে প্রক্রিয়া করা হয়।
- ক্লিক করার সাথে সাথে JSF ফর্মটি Managed Bean এর
- ব্যবসায়িক লজিক প্রক্রিয়া:
submit()মেথডে আপনি ডেটা ভ্যালিডেশন বা অন্য কোনো ব্যবসায়িক লজিক প্রয়োগ করতে পারেন।
- নেভিগেশন:
- ফর্ম সাবমিট হওয়ার পর, JSF পেজটি পরবর্তী পৃষ্ঠায় নেভিগেট করে (যেমন
success.xhtml)।
- ফর্ম সাবমিট হওয়ার পর, JSF পেজটি পরবর্তী পৃষ্ঠায় নেভিগেট করে (যেমন
JSF ফর্মের মাধ্যমে ডেটা সাবমিশনে AJAX ব্যবহার
JSF 2.0 এর সাথে AJAX ব্যবহার করে আপনি ফর্মের ইনপুটের সাথে কোনো পৃষ্ঠার রিফ্রেশ ছাড়াই ডেটা প্রক্রিয়া করতে পারেন। PrimeFaces এর মতো লাইব্রেরি AJAX সমর্থিত কম্পোনেন্ট সরবরাহ করে, তবে আপনি নিজে JSF তেও AJAX ব্যবহার করতে পারেন।
AJAX এর সাথে ফর্ম সাবমিট উদাহরণ:
<h:form>
<h:outputLabel for="username" value="Enter your name:" />
<h:inputText value="#{userBean.username}" id="username" />
<h:commandButton value="Submit" action="#{userBean.submit}">
<f:ajax execute="@form" render="message" />
</h:commandButton>
<h:outputText id="message" value="#{userBean.username}" />
</h:form>
এখানে:
<f:ajax>ব্যবহার করে ফর্ম সাবমিট হওয়ার পর পেজ রিফ্রেশ ছাড়াই আউটপুট আপডেট করা হবে।execute="@form"ট্যাগটি ফর্মের সমস্ত ইনপুট কম্পোনেন্ট এক্সিকিউট করে, এবংrender="message"আউটপুটটিকে আপডেট করবে।
সারাংশ
JSF ফর্মের মাধ্যমে ডেটা সাবমিশন একটি খুব সাধারণ প্রক্রিয়া যা ব্যবহারকারীর ইনপুট গ্রহণ এবং সেই ডেটা Managed Bean-এ প্রেরণ করে। h:form, h:inputText, এবং h:commandButton ট্যাগগুলির মাধ্যমে ফর্ম তৈরি করা হয়, যেখানে ডেটা ManagedBean এর প্রোপার্টির সাথে বাইন্ড করা হয়। এছাড়া, AJAX ব্যবহার করে ফর্ম সাবমিটের সময় পেজ রিফ্রেশ ছাড়াই ইনপুট ডেটা প্রক্রিয়া করা সম্ভব। JSF এর এই ফিচারগুলো ওয়েব অ্যাপ্লিকেশনের ব্যবহারকারী ইন্টারফেসকে আরও দ্রুত এবং ডাইনামিক করে তোলে।
JavaServer Faces (JSF) ফ্রেমওয়ার্ক ব্যবহারকারীর ইনপুট যাচাই (validation) এবং রূপান্তর (conversion) করার জন্য শক্তিশালী সুবিধা প্রদান করে। JSF Validator এবং Converter API দুটি প্রধান উপাদান, যা এই প্রক্রিয়াগুলো পরিচালনা করতে ব্যবহৃত হয়। ইনপুট ভ্যালিডেশন এবং কনভার্সন নিশ্চিত করে যে, ইউজারদের ইনপুট সঠিক এবং প্রত্যাশিত ফরম্যাটে রয়েছে।
JSF ইনপুট ভ্যালিডেশন
Inpu Validation হলো প্রক্রিয়া যার মাধ্যমে ব্যবহারকারীর ইনপুট যাচাই করা হয় যে এটি সঠিক এবং নির্দিষ্ট শর্ত পূরণ করে কিনা। JSF ফ্রেমওয়ার্কের মাধ্যমে আপনি বিভিন্ন ধরনের ভ্যালিডেটর ব্যবহার করতে পারেন যেমন ফিল্ড লেভেল ভ্যালিডেশন, যেমন ন্যূনতম দৈর্ঘ্য, ফরম্যাট যাচাই ইত্যাদি।
JSF তে ইনপুট ভ্যালিডেশন করার জন্য <f:validateBean>, <h:inputText>, <h:inputText> এর মাধ্যমে বিভিন্ন ভ্যালিডেটর অ্যাট্রিবিউট ব্যবহার করা হয়।
JSF ইনপুট ভ্যালিডেটরের উদাহরণ:
<h:form>
<h:inputText value="#{userBean.username}" required="true" minlength="5" />
<h:message for="username" />
</h:form>
এখানে:
required="true": ইনপুট ফিল্ডটি অবশ্যই পূর্ণ করতে হবে।minlength="5": ইনপুট ফিল্ডের দৈর্ঘ্য কমপক্ষে ৫টি অক্ষর হতে হবে।
JSF কাস্টম ভ্যালিডেটর
কাস্টম ভ্যালিডেটর ব্যবহার করার জন্য JSF আপনাকে JSR-303 Bean Validation API (যেমন Hibernate Validator) সাপোর্ট দেয়। এই API এর মাধ্যমে আপনি ডোমেইন লজিকের উপর ভিত্তি করে কাস্টম ভ্যালিডেশন তৈরি করতে পারবেন।
কাস্টম ভ্যালিডেটরের উদাহরণ:
@ManagedBean
public class UserBean {
private String username;
@NotNull(message = "Username cannot be null")
@Size(min = 5, message = "Username must be at least 5 characters long")
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
}
এখানে:
@NotNull: এটি যাচাই করে যে ফিল্ডটি খালি না থাকে।@Size: এটি যাচাই করে যে ফিল্ডের দৈর্ঘ্য কমপক্ষে ৫টি অক্ষর হতে হবে।
JSF কনভার্সন (Converter API)
JSF কনভার্সন ব্যবহৃত হয় ইনপুট ডেটাকে একটি নির্দিষ্ট ফর্ম্যাটে রূপান্তর করার জন্য। সাধারণত, Converter গুলো ব্যবহারকারীর ইনপুট বা মডেল ডেটার মধ্যে রূপান্তর করতে ব্যবহৃত হয়, যেমন স্ট্রিং থেকে ডেটা টাইপে রূপান্তর বা তার বিপরীত।
JSF তে কনভার্সন কাস্টম কনভার্টার ব্যবহার করে করা হয়, যা ফর্ম উপাদান এবং Managed Bean এর মধ্যে ডেটা রূপান্তর করতে সাহায্য করে। Converter ইনপুট ফিল্ডের মানকে নির্দিষ্ট প্রকারের ডেটা টাইপে রূপান্তর করে (যেমন, স্ট্রিং থেকে ডেট বা স্ট্রিং থেকে ইন্টিজার)।
JSF কনভার্টারের উদাহরণ:
import javax.faces.convert.Converter;
import javax.faces.convert.FacesConverter;
@FacesConverter(forClass = Date.class)
public class DateConverter implements Converter {
@Override
public Object getAsObject(FacesContext context, UIComponent component, String value) {
try {
SimpleDateFormat format = new SimpleDateFormat("dd/MM/yyyy");
return format.parse(value);
} catch (ParseException e) {
return null;
}
}
@Override
public String getAsString(FacesContext context, UIComponent component, Object value) {
if (value == null) {
return "";
}
SimpleDateFormat format = new SimpleDateFormat("dd/MM/yyyy");
return format.format(value);
}
}
এখানে:
@FacesConverter: কনভার্টারটি JSF ফ্রেমওয়ার্কে চিহ্নিত করার জন্য ব্যবহৃত হয়।getAsObject: স্ট্রিং মানকে কাস্টম ডেটা টাইপ (এখানে ডেট) তে রূপান্তর করে।getAsString: কাস্টম ডেটা টাইপকে স্ট্রিং এ রূপান্তর করে।
JSF পেজে কনভার্টার ব্যবহার:
<h:form>
<h:inputText value="#{userBean.date}" converter="dateConverter" />
</h:form>
এখানে:
converter="dateConverter": JSF পেজে কনভার্টার ব্যবহার করতেconverterঅ্যাট্রিবিউটটি ব্যবহার করা হয়।
সারাংশ
JSF তে Input Validation এবং Converter API ডেটার সঠিকতা এবং প্রক্রিয়া নিশ্চিত করার জন্য গুরুত্বপূর্ণ উপাদান। Input Validation ব্যবহারকারীর ইনপুট যাচাই করতে সাহায্য করে, যেমন required এবং minlength অ্যাট্রিবিউট ব্যবহার করে, এবং Converter API ডেটাকে প্রয়োজনীয় ফরম্যাটে রূপান্তর করার জন্য ব্যবহৃত হয়। কাস্টম ভ্যালিডেটর এবং কনভার্টার তৈরি করার মাধ্যমে আপনি আপনার অ্যাপ্লিকেশনের ইনপুট এবং ডেটা রূপান্তর আরও উন্নত ও কাস্টমাইজড করতে পারেন।
JavaServer Faces (JSF) ফ্রেমওয়ার্কে Custom Validator তৈরি করা একটি শক্তিশালী পদ্ধতি, যা ডেভেলপারদের ইউজার ইনপুটের জন্য কাস্টম ভ্যালিডেশন লজিক প্রয়োগ করার সুযোগ দেয়। JSF এর ইনপুট কম্পোনেন্টগুলোর সাথে কাস্টম ভ্যালিডেটর ব্যবহার করে, আপনি নিজস্ব ভ্যালিডেশন লজিক তৈরি করতে পারেন যা ব্যবহারকারীর ইনপুটের উপর ভিত্তি করে বিশেষ শর্ত বা নিয়ম প্রয়োগ করে।
Custom Validator কী?
Custom Validator হলো একটি ক্লাস যা JSF ফ্রেমওয়ার্কে ইউজার ইনপুটের ভ্যালিডেশন করার জন্য তৈরি করা হয়। এটি JSF এর @FacesValidator অ্যানোটেশন দিয়ে চিহ্নিত করা হয় এবং validate() মেথড ব্যবহার করে ইনপুট ভ্যালিডেশন সম্পাদন করে।
Custom Validator তৈরি করার পদ্ধতি
- ভ্যালিডেটর ক্লাস তৈরি করা: আপনি একটি নতুন ক্লাস তৈরি করবেন যা
javax.faces.validator.Validatorইন্টারফেস বাjavax.faces.validator.Validatorএরvalidate()মেথড ইমপ্লিমেন্ট করবে। - JSF পেজে ব্যবহার করা: আপনার কাস্টম ভ্যালিডেটর পেজের ইনপুট কম্পোনেন্টের সাথে যুক্ত করা হবে।
Custom Validator তৈরি করার ধাপ
১. কাস্টম ভ্যালিডেটর ক্লাস তৈরি করা
প্রথমে একটি কাস্টম ভ্যালিডেটর ক্লাস তৈরি করুন, যা Validator ইন্টারফেস বা javax.faces.validator.Validator ক্লাস থেকে এক্সটেন্ড হবে। এর মধ্যে validate() মেথডটি ইমপ্লিমেন্ট করতে হবে, যা আপনার কাস্টম ভ্যালিডেশন লজিক কার্যকর করবে।
CustomValidator.java
import javax.faces.application.FacesMessage;
import javax.faces.context.FacesContext;
import javax.faces.validator.FacesValidator;
import javax.faces.validator.Validator;
import javax.faces.validator.ValidatorException;
@FacesValidator("usernameValidator")
public class UsernameValidator implements Validator {
@Override
public void validate(FacesContext context, javax.faces.component.UIComponent component, Object value) throws ValidatorException {
String username = (String) value;
// ভ্যালিডেশন লজিক: যদি ব্যবহারকারী "admin" নাম্বার দেন তবে তা গ্রহণ করা হবে না
if (username != null && username.equalsIgnoreCase("admin")) {
FacesMessage msg = new FacesMessage("Invalid username", "The username 'admin' is not allowed.");
msg.setSeverity(FacesMessage.SEVERITY_ERROR);
throw new ValidatorException(msg);
}
}
}
এখানে:
@FacesValidator("usernameValidator"): এই অ্যানোটেশনটি JSF ফ্রেমওয়ার্ককে জানায় যে এটি একটি কাস্টম ভ্যালিডেটর এবং এটি "usernameValidator" নামে অ্যাক্সেস করা যাবে।validate()মেথড: এটি ইউজারের ইনপুট ভ্যালিডেট করে এবং যদি ইনপুট ভ্যালিড না হয়, তবেValidatorExceptionছুড়ে দেয় এবং একটি ফেস মেসেজ তৈরি করে।
২. JSF পেজে কাস্টম ভ্যালিডেটর ব্যবহার করা
এখন আপনি এই কাস্টম ভ্যালিডেটরকে JSF পেজে ব্যবহার করতে পারেন। h:inputText বা অন্য কোনো ইনপুট কম্পোনেন্টের জন্য আপনার কাস্টম ভ্যালিডেটর ব্যবহার করতে f:validator ট্যাগটি ব্যবহার করুন।
form.xhtml
<h:form>
<h:outputLabel for="username" value="Username" />
<h:inputText id="username" value="#{userBean.username}">
<f:validator validatorId="usernameValidator" />
</h:inputText>
<h:message for="username" />
<h:commandButton value="Submit" action="#{userBean.submit}" />
</h:form>
এখানে:
f:validator: এই ট্যাগটি কাস্টম ভ্যালিডেটরকে ইনপুট কম্পোনেন্টের সাথে যুক্ত করে।validatorId="usernameValidator": এটি সেই ভ্যালিডেটরের আইডি যেটি আপনি@FacesValidatorঅ্যানোটেশনের মাধ্যমেUsernameValidatorক্লাসে ডিফাইন করেছেন।
৩. Managed Bean এর মাধ্যমে ইনপুট প্রসেসিং
এখন Managed Bean তৈরি করে ইনপুট প্রসেসিং এবং সাবমিশন লজিক সম্পাদন করতে হবে।
UserBean.java
import javax.faces.bean.ManagedBean;
@ManagedBean
public class UserBean {
private String username;
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String submit() {
// এখানে আপনি অন্য বিজনেস লজিক যোগ করতে পারেন
return "success"; // পেজ নেভিগেশন রিটার্ন করা হয়
}
}
এখানে:
submit()মেথডটি ব্যবহারকারীর ইনপুট প্রসেসিং এবং পরবর্তী পেজে নেভিগেশন নিয়ন্ত্রণ করে।
Custom Validator এর সুবিধা
- ইউজার ইন্টারঅ্যাকশন: কাস্টম ভ্যালিডেটর ব্যবহার করে আপনি ইউজারের ইনপুটে কাস্টম লজিক প্রয়োগ করতে পারেন, যা সাধারণ ভ্যালিডেশন পদ্ধতিগুলোর বাইরে।
- ফেস মেসেজ: আপনি কাস্টম ভ্যালিডেটরের মাধ্যমে সঠিক ফেস মেসেজ প্রদান করতে পারেন যা ব্যবহারকারীকে ইনপুট ঠিক করতে সাহায্য করবে।
- সীমিত বা জটিল শর্ত: কাস্টম ভ্যালিডেটরের মাধ্যমে আপনি ইনপুটের জন্য আরো জটিল শর্ত এবং কনফিগারেশন প্রয়োগ করতে পারেন।
সারাংশ
JSF এর Custom Validator ব্যবহার করে আপনি সহজেই আপনার ইউজারের ইনপুটের জন্য কাস্টম ভ্যালিডেশন লজিক তৈরি করতে পারেন। এটি ইউজারের ইনপুটের উপরে নির্দিষ্ট শর্ত প্রয়োগ করে এবং ইউজারকে সঠিক ইনপুট প্রদান করতে সহায়তা করে। @FacesValidator অ্যানোটেশন এবং validate() মেথডের মাধ্যমে JSF ফ্রেমওয়ার্কে কাস্টম ভ্যালিডেটর তৈরি এবং ব্যবহারের প্রক্রিয়া সম্পাদন করা হয়।
JavaServer Faces (JSF) ফ্রেমওয়ার্কে Bean Validation এবং Annotations খুবই গুরুত্বপূর্ণ, কারণ এগুলি ডেটা ভ্যালিডেশন এবং ইউজার ইনপুট যাচাই করার জন্য ব্যবহৃত হয়। JSF-এ Bean Validation ডেটার মান যাচাই করতে সহায়তা করে, যাতে অ্যাপ্লিকেশনটি সঠিক এবং নির্ভরযোগ্য ডেটার উপর কাজ করে।
Bean Validation কি?
Bean Validation হল JavaBeans-এর জন্য একটি স্ট্যান্ডার্ড স্পেসিফিকেশন যা অবজেক্টের প্রপার্টি বা ফিল্ডের মান যাচাই করার জন্য ব্যবহৃত হয়। এটি বিশেষ করে ইনপুট ভ্যালিডেশন, যেমন ফর্ম ফিল্ড ভ্যালিডেশন এবং মডেল ডেটার জন্য ব্যবহৃত হয়। JSF এবং অন্যান্য Java EE ফ্রেমওয়ার্কগুলোর সাথে Bean Validation ব্যবহার করলে ডেভেলপাররা খুব সহজে ইউজারের ইনপুট যাচাই করতে পারেন।
JSF-এ Bean Validation কার্যকর করতে JSR 303/JSR 380 স্পেসিফিকেশন ব্যবহার করা হয়। এটি javax.validation প্যাকেজের মাধ্যমে প্রক্রিয়া করে। এটি ভ্যালিডেশন এন্ড পলিসি তৈরির জন্য Annotations সরবরাহ করে যা ডেটার সততা নিশ্চিত করে।
Bean Validation এর কাজের প্রক্রিয়া
Bean Validation সাধারণত Annotations এর মাধ্যমে কাজ করে। এই Annotations গুলি JavaBeans এর ফিল্ড, মেথড, বা ক্লাসে যোগ করা হয়, যাতে সেগুলোর মান যাচাই করা যায়। Bean Validation বিভিন্ন ধরনের ইনপুট ভ্যালিডেশন নিশ্চিত করতে সহায়তা করে, যেমন ফর্ম ফিল্ডে পাঠ্য মানের দৈর্ঘ্য, নাম্বার, তারিখ, ইমেইল ফরম্যাট যাচাই করা।
Common Bean Validation Annotations
- @NotNull: একটি প্রপার্টি অবশ্যই null না হওয়া উচিত।
- @Size: একটি String বা Collection এর সাইজ যাচাই করা।
- @Min / @Max: একটি সংখ্যার সর্বনিম্ন এবং সর্বোচ্চ সীমা যাচাই করা।
- @Email: একটি বৈধ ইমেইল ফরম্যাট যাচাই করা।
- @Pattern: একটি String প্রপার্টির জন্য প্যাটার্ন যাচাই করা।
- @Past / @Future: তারিখটি অতীত বা ভবিষ্যতের হতে হবে।
- @AssertTrue / @AssertFalse: Boolean প্রপার্টি সঠিক হতে হবে।
উদাহরণ:
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;
import javax.validation.constraints.Email;
public class User {
@NotNull
@Size(min = 2, max = 30)
private String name;
@NotNull
@Email
private String email;
// Getter and Setter
}
এখানে:
- @NotNull:
nameএবংemailফিল্ডের মান null হতে পারবে না। - @Size:
nameফিল্ডের দৈর্ঘ্য কমপক্ষে ২ এবং সর্বোচ্চ ৩০ হতে হবে। - @Email:
emailফিল্ডটি একটি বৈধ ইমেইল ফরম্যাট হতে হবে।
JSF Bean Validation এবং UI কম্পোনেন্টে Annotations ব্যবহার
JSF-এ Bean Validation ব্যবহারের জন্য JSF UI কম্পোনেন্ট এবং Managed Beans এর মধ্যে যুক্ত করা হয়। JSF ফর্মের ভ্যালিডেশন করতে, আপনি h:inputText, h:inputSecret এবং অন্যান্য কম্পোনেন্টগুলির মধ্যে validation ব্যবহার করতে পারেন। এতে, ফর্ম সাবমিট করার সময় ভ্যালিডেশন ঘটে এবং যদি কোনো ত্রুটি থাকে, তাহলে তা ব্যবহারকারীকে দেখানো হয়।
উদাহরণ:
<h:form>
<h:outputLabel for="name" value="Name:" />
<h:inputText id="name" value="#{userBean.name}" required="true" />
<h:message for="name" />
<h:outputLabel for="email" value="Email:" />
<h:inputText id="email" value="#{userBean.email}" required="true" />
<h:message for="email" />
<h:commandButton value="Submit" action="#{userBean.submit}" />
</h:form>
এখানে:
required="true": এটি নিশ্চিত করে যে ইউজার ইনপুট ফিল্ডটি খালি না থাকে।h:message: এটি ত্রুটির বার্তা দেখানোর জন্য ব্যবহৃত হয়, যখন ইনপুট ভ্যালিডেশন ব্যর্থ হয়।
Bean Validation ফিচার JSF Managed Bean এ যুক্ত করা
JSF এর Managed Beans এ Bean Validation ইন্টিগ্রেট করতে, সাধারণত @Valid annotation ব্যবহার করা হয়, যাতে ইউজারের ইনপুট প্রপার্টি ভ্যালিডেশনের জন্য যাচাই করা যায়।
উদাহরণ: Managed Bean এ Bean Validation
import javax.faces.bean.ManagedBean;
import javax.faces.bean.RequestScoped;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;
import javax.validation.constraints.Email;
@ManagedBean
@RequestScoped
public class UserBean {
@NotNull(message = "Name is required")
@Size(min = 2, max = 30, message = "Name must be between 2 and 30 characters")
private String name;
@NotNull(message = "Email is required")
@Email(message = "Email must be valid")
private String email;
// Getters and Setters
public String submit() {
// Your business logic here
return "success";
}
}
এখানে:
@NotNull,@Size,@Email: Managed Bean এর ফিল্ড গুলোর জন্য Bean Validation এর Annotations ব্যবহার করা হয়েছে।
Bean Validation এর Integration এর মাধ্যমে ইউজার ইন্টারফেসে ত্রুটি দেখানো
JSF Bean Validation সম্পন্ন হলে, h:message কম্পোনেন্ট ব্যবহার করে ত্রুটি বার্তা UI তে দেখানো যায়। যদি কোনো ইনপুট ভ্যালিডেশন ব্যর্থ হয়, তাহলে ব্যবহারকারীকে ত্রুটি বার্তা দেখানো হবে।
<h:form>
<h:inputText value="#{userBean.name}" />
<h:message for="name" />
<h:inputText value="#{userBean.email}" />
<h:message for="email" />
<h:commandButton value="Submit" action="#{userBean.submit}" />
</h:form>
এখানে, h:message কম্পোনেন্ট ইনপুট ফিল্ডের সাথে সম্পর্কিত ত্রুটি দেখাবে, যদি ভ্যালিডেশন ব্যর্থ হয়।
সারাংশ
JSF-এ Bean Validation ব্যবহার করে আপনি ইউজার ইনপুট যাচাই করতে পারেন এবং Annotations এর মাধ্যমে সেই যাচাইয়ের জন্য শর্তাদি নির্ধারণ করতে পারেন। Bean Validation JSF অ্যাপ্লিকেশনে ডেটা সঠিকতা নিশ্চিত করতে সহায়তা করে, এবং JSF কম্পোনেন্টগুলির সাথে ইন্টিগ্রেট হয়ে একটি কার্যকর ভ্যালিডেশন সিস্টেম তৈরি করে। Annotations (যেমন, @NotNull, @Size, @Email) এর মাধ্যমে আপনি সহজেই ভ্যালিডেশন যুক্ত করতে পারেন এবং h:message ব্যবহার করে ইউজারের ত্রুটি দেখাতে পারেন।
Read more