Vaadin ফর্ম তৈরি করার জন্য একটি শক্তিশালী এবং ব্যবহারবান্ধব প্রক্রিয়া সরবরাহ করে। এতে ফর্মের জন্য প্রয়োজনীয় UI উপাদানগুলো সহজে তৈরি করা যায় এবং সেই ফর্মের ইনপুট ভ্যালিডেশন প্রক্রিয়াও সম্পাদন করা সম্ভব। Vaadin এর মাধ্যমে ফর্মস এবং ভ্যালিডেশন সহজেই পরিচালনা করা যায়, যা অ্যাপ্লিকেশনটি আরও শক্তিশালী এবং নির্ভুল করে তোলে।
Vaadin ফর্ম তৈরি করা
Vaadin এ ফর্ম তৈরি করার জন্য সাধারণত FormLayout বা VerticalLayout ব্যবহার করা হয়। এই ফর্মগুলোর মধ্যে বিভিন্ন UI কম্পোনেন্ট যেমন টেক্সট ফিল্ড, পাসওয়ার্ড ফিল্ড, বাটন ইত্যাদি যুক্ত করা যায়।
উদাহরণ: একটি সাধারণ ফর্ম তৈরি করা
public class MyForm extends VerticalLayout {
public MyForm() {
TextField nameField = new TextField("Name");
TextField emailField = new TextField("Email");
PasswordField passwordField = new PasswordField("Password");
Button submitButton = new Button("Submit", event -> validateAndSubmit(nameField, emailField, passwordField));
add(nameField, emailField, passwordField, submitButton);
}
private void validateAndSubmit(TextField name, TextField email, PasswordField password) {
// ফর্ম ভ্যালিডেশন এবং ডেটা প্রসেসিং লজিক এখানে থাকবে
}
}
এই উদাহরণে TextField এবং PasswordField ব্যবহার করে একটি ফর্ম তৈরি করা হয়েছে, এবং Button ক্লিক করার মাধ্যমে ফর্মের ডেটা সাবমিট হবে।
ফর্ম ভ্যালিডেশন
ফর্ম ভ্যালিডেশন নিশ্চিত করে যে ব্যবহারকারী সঠিক ডেটা প্রদান করছেন। Vaadin তে ফর্ম ভ্যালিডেশন সাধারণত দুটি ধাপে করা হয়:
- কাস্টম ভ্যালিডেশন: ফিল্ডের মান চেক করা যেমন ফিল্ডটি খালি না হওয়া, সঠিক ফরম্যাটে ডেটা থাকা।
- অটোমেটিক ভ্যালিডেশন:
TextField,EmailField,PasswordFieldইত্যাদির মত ফিল্ডে স্বয়ংক্রিয় ভ্যালিডেশন প্রদান করা।
উদাহরণ: সাধারণ ভ্যালিডেশন
public class MyForm extends VerticalLayout {
public MyForm() {
TextField nameField = new TextField("Name");
nameField.setRequired(true);
nameField.setPlaceholder("Enter your name");
EmailField emailField = new EmailField("Email");
emailField.setRequired(true);
emailField.setPlaceholder("Enter your email");
PasswordField passwordField = new PasswordField("Password");
passwordField.setRequired(true);
passwordField.setPlaceholder("Enter your password");
Button submitButton = new Button("Submit", event -> {
if (isValid(nameField, emailField, passwordField)) {
// ফর্ম সফলভাবে সাবমিট হবে
Notification.show("Form Submitted Successfully!");
} else {
// ফর্ম ভ্যালিডেশন ত্রুটি
Notification.show("Please fill all fields correctly!");
}
});
add(nameField, emailField, passwordField, submitButton);
}
private boolean isValid(TextField name, EmailField email, PasswordField password) {
return !name.isEmpty() && !email.isEmpty() && !password.isEmpty();
}
}
এই উদাহরণে setRequired(true) ব্যবহার করা হয়েছে, যা নিশ্চিত করে যে ইনপুট ফিল্ডগুলি খালি রাখা যাবে না। এছাড়াও একটি কাস্টম ভ্যালিডেশন মেথড তৈরি করা হয়েছে, যা সব ফিল্ড সঠিকভাবে পূর্ণ হলে শুধুমাত্র সাবমিট বাটন কাজ করবে।
ভ্যালিডেশন এন্টারফেস ব্যবহার করা
Vaadin তে ভ্যালিডেশন করতে Binder ইন্টারফেস ব্যবহৃত হয়, যা ফর্মের ইনপুট ডেটা ভ্যালিডেট করে। Binder ডেটাকে মডেল অবজেক্টে ম্যাপ করে এবং সেই ডেটার ভ্যালিডেশন নিশ্চিত করে। এটি ডেটা ভ্যালিডেশন এবং বাইনিংকে একটি কার্যকরী উপায়ে একত্রিত করে।
উদাহরণ: Binder ব্যবহার করে ফর্ম ভ্যালিডেশন
public class MyForm extends VerticalLayout {
public MyForm() {
Binder<User> binder = new Binder<>(User.class);
TextField nameField = new TextField("Name");
nameField.setRequired(true);
binder.forField(nameField).asRequired("Name is required").bind(User::getName, User::setName);
EmailField emailField = new EmailField("Email");
emailField.setRequired(true);
binder.forField(emailField).asRequired("Email is required").bind(User::getEmail, User::setEmail);
PasswordField passwordField = new PasswordField("Password");
passwordField.setRequired(true);
binder.forField(passwordField).asRequired("Password is required").bind(User::getPassword, User::setPassword);
Button submitButton = new Button("Submit", event -> {
if (binder.validate().isOk()) {
// ফর্ম সফলভাবে সাবমিট হবে
Notification.show("Form Submitted Successfully!");
} else {
// ফর্ম ভ্যালিডেশন ত্রুটি
Notification.show("Please fill all fields correctly!");
}
});
add(nameField, emailField, passwordField, submitButton);
}
}
এখানে Binder ব্যবহার করা হয়েছে যাতে ফর্ম ফিল্ডগুলোর ভ্যালিডেশন আরো শক্তিশালী হয়। forField মেথডের মাধ্যমে ফিল্ডগুলো ভ্যালিডেট করা হয় এবং একটি মডেল ক্লাস User তৈরি করে সেই অনুযায়ী ফিল্ডগুলো বাইন করা হয়।
ভ্যালিডেশন টিপস
- ইউজার ফ্রেন্ডলি মেসেজ: ফর্ম ভ্যালিডেশন ত্রুটির মেসেজগুলো পরিষ্কার এবং ইউজার ফ্রেন্ডলি হওয়া উচিত। এর মাধ্যমে ব্যবহারকারী বুঝতে পারবে কোথায় ভুল করেছে।
- অনেক ফিল্ড ভ্যালিডেশন: একাধিক ফিল্ডের জন্য একসাথে ভ্যালিডেশন করতে পারেন, যেমন দুটি ফিল্ডের মান মিলে গেলে সেগুলোকে সাবমিট করা।
- ডাইনামিক ভ্যালিডেশন: কিছু ভ্যালিডেশন ডাইনামিকভাবে পরিবর্তন হতে পারে, যেমন পাসওয়ার্ড শক্তির চেকিং বা ইমেইল ফরম্যাট চেক করা।
Vaadin এর মাধ্যমে ফর্মস এবং ভ্যালিডেশন সহজেই তৈরি করা যায় এবং ডেভেলপাররা বিভিন্ন ধরনের ভ্যালিডেশন মেথড ব্যবহার করে নিশ্চিত করতে পারেন যে ব্যবহারকারী সঠিক ডেটা ইনপুট করছে। Binder এবং FormLayout এর মতো উপাদানগুলি Vaadin-কে ফর্ম ডিজাইন এবং ভ্যালিডেশনকে আরো সহজ ও কার্যকর করে তোলে।
Vaadin-এ ফর্ম কম্পোনেন্টস এবং লেআউট ব্যবহৃত হয় ওয়েব অ্যাপ্লিকেশনের ইউজার ইন্টারফেস তৈরি করতে। ফর্ম কম্পোনেন্টস ব্যবহার করে ডেটা ইনপুট এবং সেগুলোর ভ্যালিডেশন করা যায়, আর লেআউট কম্পোনেন্টস দিয়ে এই ফর্মগুলোকে সুন্দরভাবে সাজানো হয়। Vaadin ফর্ম এবং লেআউট ব্যবস্থাপনার জন্য অনেক শক্তিশালী কম্পোনেন্ট এবং ফিচার সরবরাহ করে, যা ডেভেলপারদের সহজে ডাইনামিক এবং রেসপনসিভ ফর্ম তৈরি করতে সহায়তা করে।
Vaadin ফর্ম কম্পোনেন্টস
Vaadin বিভিন্ন ধরনের ফর্ম ইনপুট কম্পোনেন্ট সরবরাহ করে, যা ইউজার থেকে ডেটা সংগ্রহ করার জন্য ব্যবহৃত হয়। এখানে কিছু গুরুত্বপূর্ণ ফর্ম কম্পোনেন্টের বর্ণনা দেওয়া হলো:
1. TextField
TextFieldকম্পোনেন্ট ব্যবহার করে ইউজার টেক্সট ইনপুট দিতে পারেন। এটি সাধারণত টেক্সট ডেটা গ্রহণ করতে ব্যবহৃত হয়।উদাহরণ:
TextField nameField = new TextField("Name"); nameField.setRequired(true); // এটা একটি আবশ্যক ক্ষেত্র হিসেবে চিহ্নিত করে
2. PasswordField
PasswordFieldকম্পোনেন্ট ব্যবহার করে নিরাপদ পাসওয়ার্ড ইনপুট নেওয়া হয়। এটি টেক্সট ফিল্ডের মতো, তবে এর ইনপুটগুলো আড়াল থাকে।উদাহরণ:
PasswordField passwordField = new PasswordField("Password"); passwordField.setRequired(true);
3. TextArea
TextAreaব্যবহার করে দীর্ঘ টেক্সট ইনপুট নেয়া যায়, যা সাধারণত নোট বা বার্তা গ্রহণ করতে ব্যবহৃত হয়।উদাহরণ:
TextArea messageField = new TextArea("Message"); messageField.setRequired(true);
4. ComboBox
ComboBoxকম্পোনেন্ট একটি ড্রপডাউন মেনু হিসেবে কাজ করে, যেখানে ব্যবহারকারী প্রিসেট অপশন থেকে একটি অপশন সিলেক্ট করতে পারেন।উদাহরণ:
ComboBox<String> countryComboBox = new ComboBox<>("Country"); countryComboBox.setItems("USA", "Canada", "India"); countryComboBox.setRequired(true);
5. Checkbox
Checkboxকম্পোনেন্ট ব্যবহার করে ইউজার এক বা একাধিক অপশন নির্বাচন করতে পারেন।উদাহরণ:
Checkbox acceptTerms = new Checkbox("I accept the terms and conditions"); acceptTerms.setRequired(true);
6. DatePicker
DatePickerব্যবহার করে একটি নির্দিষ্ট তারিখ নির্বাচন করা যায়।উদাহরণ:
DatePicker dateOfBirth = new DatePicker("Date of Birth"); dateOfBirth.setRequired(true);
ফর্ম ভ্যালিডেশন
Vaadin ফর্ম কম্পোনেন্টের জন্য ভ্যালিডেশন সিস্টেম সরবরাহ করে, যার মাধ্যমে আপনি ইনপুট ডেটার সঠিকতা নিশ্চিত করতে পারেন। উদাহরণস্বরূপ, একটি TextField বা PasswordField এর জন্য ম্যান্ডেটরি (আবশ্যক) ফিল্ড চেক করা, বা ইমেল ফিল্ডে সঠিক ইমেল ফরম্যাট চেক করা যায়।
TextField emailField = new TextField("Email");
emailField.setRequired(true);
emailField.addValueChangeListener(event -> {
if (!event.getValue().contains("@")) {
emailField.setInvalid(true);
emailField.setErrorMessage("Please enter a valid email address.");
} else {
emailField.setInvalid(false);
}
});
Vaadin লেআউট কম্পোনেন্টস
লেআউট কম্পোনেন্টস ব্যবহার করে আপনি UI এর মধ্যে বিভিন্ন কম্পোনেন্টের স্থিতি এবং বিন্যাস কাস্টমাইজ করতে পারেন। Vaadin অনেক ধরনের লেআউট কম্পোনেন্ট সরবরাহ করে, যার মাধ্যমে ইউজার ইন্টারফেসের ডিজাইন করা যায়।
1. VerticalLayout
VerticalLayoutকম্পোনেন্ট ব্যবহার করে আপনি উপাদানগুলোকে উল্লম্বভাবে সাজাতে পারেন, যেমন ফর্ম ফিল্ড, বাটন ইত্যাদি।উদাহরণ:
VerticalLayout formLayout = new VerticalLayout(); formLayout.add(nameField, passwordField, messageField);
2. HorizontalLayout
HorizontalLayoutকম্পোনেন্ট ব্যবহার করে উপাদানগুলোকে অনুভূমিকভাবে সাজানো যায়।উদাহরণ:
HorizontalLayout buttonLayout = new HorizontalLayout(); buttonLayout.add(saveButton, cancelButton);
3. GridLayout
GridLayoutকম্পোনেন্ট ব্যবহার করে আপনি উপাদানগুলোকে গ্রিড আকারে সাজাতে পারেন, যা টেবিল বা ফর্মের জন্য উপযুক্ত।উদাহরণ:
GridLayout gridLayout = new GridLayout(2, 2); gridLayout.addComponent(nameField, 0, 0); gridLayout.addComponent(passwordField, 1, 0); gridLayout.addComponent(messageField, 0, 1, 1, 1);
4. FormLayout
FormLayoutএকটি বিশেষ ধরনের লেআউট, যা ফর্ম কম্পোনেন্টগুলোর জন্য বিশেষভাবে ডিজাইন করা হয়েছে। এটি ফর্ম এলিমেন্টগুলিকে সুন্দরভাবে সাজাতে সাহায্য করে।উদাহরণ:
FormLayout formLayout = new FormLayout(); formLayout.add(nameField, emailField, passwordField);
লেআউট কাস্টমাইজেশন
Vaadin লেআউট কম্পোনেন্টগুলির স্টাইল এবং কাস্টমাইজেশন করার জন্য CSS ক্লাস এবং inline স্টাইল ব্যবহার করা যেতে পারে। উদাহরণস্বরূপ:
formLayout.getStyle().set("padding", "20px").set("background-color", "#f4f4f4");
এছাড়া, setWidth() এবং setHeight() মেথড ব্যবহার করে বিভিন্ন কম্পোনেন্টের আকারও কাস্টমাইজ করা যেতে পারে।
Vaadin-এ ফর্ম কম্পোনেন্টস এবং লেআউটের মাধ্যমে আপনি খুব সহজেই ডাইনামিক এবং ইন্টারেক্টিভ ওয়েব ফর্ম তৈরি করতে পারেন। এর শক্তিশালী কম্পোনেন্ট এবং লেআউট সিস্টেমের মাধ্যমে ডেভেলপাররা তাদের অ্যাপ্লিকেশনকে ব্যবহারকারী বান্ধব এবং সুরক্ষিত করতে সক্ষম হন।
Vaadin একটি শক্তিশালী ওয়েব অ্যাপ্লিকেশন ফ্রেমওয়ার্ক যা সার্ভার-সাইড ভ্যালিডেশন সমর্থন করে। সার্ভার-সাইড ভ্যালিডেশন মানে হচ্ছে, সমস্ত ইনপুট ডেটা এবং ফর্মের ভ্যালিডেশন সার্ভারে প্রক্রিয়া করা হয়, যা নিরাপদ এবং নির্ভরযোগ্য হয়। সাধারণত, সার্ভার-সাইড ভ্যালিডেশন তখন ব্যবহার করা হয় যখন ইউজারের ইনপুট খুবই গুরুত্বপূর্ণ এবং এটি নিরাপত্তা বা ডেটার সঠিকতা প্রভাবিত করতে পারে।
সার্ভার-সাইড ভ্যালিডেশন কেন প্রয়োজন?
- নিরাপত্তা: সার্ভার-সাইড ভ্যালিডেশন নিশ্চিত করে যে ইনপুটের মধ্যে কোনো বিপজ্জনক বা অপ্রত্যাশিত ডেটা নেই, যা ক্লায়েন্ট সাইডে চেক করা সম্ভব না।
- ডেটার সঠিকতা: ফর্ম ডেটার সঠিকতা নিশ্চিত করতে সার্ভার-সাইড ভ্যালিডেশন প্রক্রিয়া করা প্রয়োজন। যেমন, ইউজারের দেওয়া বয়স বা ইমেইল ঠিক কিনা তা নিশ্চিত করা।
- অফলাইন ভ্যালিডেশন: সার্ভার-সাইড ভ্যালিডেশন কাজ করে যখন ক্লায়েন্টের কাছে ইন্টারনেট কানেকশন না থাকে, কারণ সব ডেটা সার্ভারে যাচাই করা হয়।
সার্ভার-সাইড ভ্যালিডেশন কিভাবে কাজ করে?
Vaadin-এ সার্ভার-সাইড ভ্যালিডেশন সাধারণত Binder ব্যবহার করে করা হয়। Binder ক্লাসটি ইউজার ইনপুট ডেটাকে ভ্যালিডেট করার জন্য বিভিন্ন ভ্যালিডেশন রুল (যেমন: প্রয়োজনীয়তা, দৈর্ঘ্য, ফরম্যাট) ব্যবহার করে এবং তা সার্ভার-সাইডে প্রক্রিয়া করে।
সার্ভার-সাইড ভ্যালিডেশন উদাহরণ
ধরা যাক, আমরা একটি ফর্ম তৈরি করতে চাই যেখানে একটি TextField এবং একটি EmailField থাকবে, এবং এই ফর্মের ইনপুট সার্ভার-সাইডে ভ্যালিডেট করা হবে।
public class RegistrationForm extends VerticalLayout {
public RegistrationForm() {
TextField usernameField = new TextField("Username");
EmailField emailField = new EmailField("Email");
PasswordField passwordField = new PasswordField("Password");
Button submitButton = new Button("Submit");
// Binder তৈরি
Binder<User> binder = new Binder<>(User.class);
// ভ্যালিডেশন সেটআপ
binder.forField(usernameField)
.asRequired("Username is required")
.withValidator(username -> username.length() >= 3, "Username must be at least 3 characters")
.bind(User::getUsername, User::setUsername);
binder.forField(emailField)
.asRequired("Email is required")
.withValidator(email -> email.contains("@"), "Email must contain '@'")
.bind(User::getEmail, User::setEmail);
binder.forField(passwordField)
.asRequired("Password is required")
.withValidator(password -> password.length() >= 6, "Password must be at least 6 characters")
.bind(User::getPassword, User::setPassword);
// সাবমিট বাটন
submitButton.addClickListener(event -> {
if (binder.validate().isOk()) {
Notification.show("Form submitted successfully");
} else {
Notification.show("Please correct the errors in the form");
}
});
add(usernameField, emailField, passwordField, submitButton);
}
}
এখানে কী হচ্ছে?
- Binder ব্যবহার:
Binderক্লাসটি ব্যবহার করেTextField,EmailField, এবংPasswordFieldকম্পোনেন্টগুলির জন্য ভ্যালিডেশন যোগ করা হয়েছে। - ভ্যালিডেশন:
asRequired()মেথড ব্যবহার করে নিশ্চিত করা হয়েছে যে, ফিল্ডগুলো খালি না থাকে।withValidator()মেথডের মাধ্যমে ইমেইল এবং পাসওয়ার্ডের জন্য কাস্টম ভ্যালিডেশন যোগ করা হয়েছে। উদাহরণস্বরূপ, ইমেইল এ@চিহ্ন থাকতে হবে এবং পাসওয়ার্ডের দৈর্ঘ্য ৬ এর বেশি হতে হবে।
- ভ্যালিডেশন ফলাফল: যখন ফর্ম সাবমিট হয়, তখন
binder.validate()মেথড ব্যবহার করে ফর্মটি ভ্যালিড কিনা তা চেক করা হয়। যদি ভ্যালিড হয়, তাহলে সাবমিট হবে, অন্যথায় ইউজারকে একটি নোটিফিকেশন দেখানো হবে, যাতে তারা ফর্মটি সঠিকভাবে পূর্ণ করে।
Binder এর মাধ্যমে সার্ভার-সাইড ভ্যালিডেশন সুবিধা
- কাস্টম ভ্যালিডেশন রুলস: Vaadin আপনাকে নিজের কাস্টম ভ্যালিডেশন রুল তৈরি করতে দেয়, যেমন মিনিমাম বা ম্যাক্সিমাম লেন্থ চেক, ফরম্যাট চেক (ইমেইল, ফোন নম্বর ইত্যাদি)।
- দ্রুত এবং সহজ:
BinderএবংasRequiredএর মতো ফিচারগুলো সার্ভার-সাইড ভ্যালিডেশনকে দ্রুত এবং সহজ করে তোলে। - ফর্ম ম্যানেজমেন্ট:
BinderএবংBean Validationব্যবহার করে আপনি সহজেই ফর্ম ডেটা এবং ভ্যালিডেশন লজিক একত্রিত করতে পারেন। - ভ্যালিডেশন ফলাফল:
binder.validate()মেথড ব্যবহার করে আপনি সহজেই ফর্মের সমস্ত ইনপুট ভ্যালিডেশন ফলাফল ট্র্যাক করতে পারেন, যা ব্যবহারকারীদের জন্য উন্নত অভিজ্ঞতা তৈরি করে।
সার্ভার-সাইড ভ্যালিডেশনের সুবিধা
- নিরাপত্তা: সার্ভার-সাইড ভ্যালিডেশন ক্লায়েন্ট-সাইড ভ্যালিডেশন থেকে অনেক বেশি নিরাপদ, কারণ ক্লায়েন্ট সাইডের ভ্যালিডেশন অতিক্রম করা যেতে পারে।
- ডেটার সঠিকতা: সার্ভার-সাইড ভ্যালিডেশন নিশ্চিত করে যে, সব ডেটা সঠিক এবং নির্ভরযোগ্যভাবে সার্ভারে প্রক্রিয়া হবে।
- গুরুতর ফর্ম ভ্যালিডেশন: যখন ভ্যালিডেশন গুরুত্বপূর্ণ, যেমন পেমেন্ট বা সুরক্ষিত ডেটা, তখন সার্ভার-সাইড ভ্যালিডেশন অবশ্যই প্রয়োজন।
Vaadin এর সার্ভার-সাইড ভ্যালিডেশন আপনাকে শক্তিশালী এবং নিরাপদ ডেটা যাচাইয়ের উপায় প্রদান করে। এটি ক্লায়েন্ট সাইডের যেকোনো ত্রুটি বা হ্যাকিং অ্যাটাক থেকে রক্ষা করতে সহায়তা করে এবং অ্যাপ্লিকেশনটির নিরাপত্তা এবং নির্ভরযোগ্যতা নিশ্চিত করে।
Vaadin এর ফর্ম কম্পোনেন্টস ব্যবহার করে ইউজার ইনপুট ভ্যালিডেশন করা যায়। তবে কখনও কখনও প্রি-ডিফাইন্ড ভ্যালিডেটর (যেমন NotEmpty, Email, Integer) ব্যবহার করে আপনার প্রয়োজনীয় ভ্যালিডেশন পূর্ণ হয় না। সেক্ষেত্রে আপনি নিজের কাস্টম ভ্যালিডেটর তৈরি করতে পারেন।
কাস্টম ভ্যালিডেটর তৈরি করার প্রয়োজন
কাস্টম ভ্যালিডেটর তৈরি করার জন্য সাধারণত আপনাকে একটি নতুন ভ্যালিডেটর ক্লাস তৈরি করতে হবে যা com.vaadin.flow.data.validator.AbstractValidator অথবা com.vaadin.flow.data.validator.Validator ইন্টারফেস বা ক্লাস থেকে এক্সটেন্ড করবে। এর মাধ্যমে আপনি নিজের কাস্টম ভ্যালিডেশন লজিক এবং মেসেজ কাস্টমাইজ করতে পারবেন।
কাস্টম ভ্যালিডেটর তৈরি করার ধাপ
AbstractValidatorক্লাস এক্সটেন্ড করাAbstractValidatorক্লাসটি ব্যবহার করে আপনি কাস্টম ভ্যালিডেটর তৈরি করতে পারেন। এই ক্লাসেরisValidমেথডটি আপনার ভ্যালিডেশন লজিক প্রয়োগ করে।ভ্যালিডেশন লজিক লেখার মাধ্যমে ভ্যালিডেটর তৈরি করা
নিচে একটি উদাহরণ দেওয়া হলো যেখানে
TextFieldএর জন্য একটি কাস্টম ভ্যালিডেটর তৈরি করা হয়েছে, যা চেক করবে যে ইউজার ইনপুটের দৈর্ঘ্য ৫ এর বেশি হতে হবে।import com.vaadin.flow.data.validator.AbstractValidator; public class MinLengthValidator extends AbstractValidator<String> { private final int minLength; public MinLengthValidator(int minLength) { super("Input must be at least " + minLength + " characters long"); this.minLength = minLength; } @Override protected boolean isValidValue(String value) { return value != null && value.length() >= minLength; } }- এই
MinLengthValidatorকাস্টম ভ্যালিডেটরটি চেক করবে যে ইনপুটের দৈর্ঘ্য একটি নির্দিষ্টminLengthএর চেয়ে ছোট নয়। - এখানে
super("message")ব্যবহার করা হয়েছে, যা ভ্যালিডেশন ফেইল হলে শো করা হবে।
- এই
কাস্টম ভ্যালিডেটর ব্যবহার করা
কাস্টম ভ্যালিডেটরটি এখন আপনি যেকোনো ফর্ম কম্পোনেন্টে ব্যবহার করতে পারেন। উদাহরণস্বরূপ, একটি
TextFieldএ এই কাস্টম ভ্যালিডেটর ব্যবহার করা হলো:TextField textField = new TextField("Enter at least 5 characters"); MinLengthValidator minLengthValidator = new MinLengthValidator(5); textField.setValidator(minLengthValidator); // ভ্যালিডেশন ট্রিগার করার জন্য: textField.addValueChangeListener(event -> { if (textField.isInvalid()) { // Validation failed, show error message Notification.show("Validation failed: " + textField.getErrorMessage()); } });- এখানে
setValidator()মেথড দিয়ে কাস্টম ভ্যালিডেটর যোগ করা হয়েছে। addValueChangeListenerব্যবহার করে ভ্যালিডেশন প্রয়োগ করা হয়েছে এবং যদি ইনপুটটি অবৈধ হয়, তাহলে একটি এরর মেসেজ শো করা হচ্ছে।
- এখানে
কাস্টম ভ্যালিডেটরের সুবিধা
- ইনপুট কাস্টমাইজ করা: আপনার অ্যাপ্লিকেশনের জন্য বিশেষ কোনো ভ্যালিডেশন প্রয়োজন হলে কাস্টম ভ্যালিডেটর ব্যবহার করতে পারবেন, যা স্ট্যান্ডার্ড ভ্যালিডেটর দিয়ে সম্ভব নয়।
- ভ্যালিডেশন লজিক এক্সটেন্ড করা: কাস্টম ভ্যালিডেটর ব্যবহার করে আপনি বিভিন্ন ধরনের কাস্টম লজিক যেমন ডেটাবেস চেক, ফাইল চেক বা অন্যান্য কন্ডিশন চেক করতে পারবেন।
- ভ্যালিডেশন মেসেজ কাস্টমাইজ করা: ভ্যালিডেশন মেসেজগুলি কাস্টমাইজ করা সম্ভব, যাতে ইউজাররা সঠিকভাবে ইনপুট করতে পারে।
উপসংহার
Vaadin এ কাস্টম ভ্যালিডেটর তৈরি করে আপনি আপনার অ্যাপ্লিকেশনের ভ্যালিডেশন লজিক আরও কার্যকরভাবে কাস্টমাইজ করতে পারবেন। AbstractValidator ক্লাস বা Validator ইন্টারফেস ব্যবহার করে আপনি প্রয়োজনীয় ভ্যালিডেশন লজিক লিখতে পারবেন এবং ব্যবহারকারীর ইনপুটকে আরও নির্ভরযোগ্যভাবে যাচাই করতে পারবেন।
Vaadin এ ফর্ম সাবমিশন এবং ডাটা প্রসেসিং একটি গুরুত্বপূর্ণ প্রক্রিয়া, যা ব্যবহারকারীর ইনপুট ডেটা গ্রহণ করে এবং তা সঠিকভাবে ব্যাকএন্ডে প্রক্রিয়া করে। এই প্রক্রিয়া সঠিকভাবে পরিচালনা করা অ্যাপ্লিকেশনের কার্যকারিতা এবং ডেটা সঠিকতার জন্য অপরিহার্য। এখানে ফর্ম সাবমিশন এবং ডাটা প্রসেসিংয়ের মৌলিক ধারণা এবং উদাহরণ দেওয়া হলো।
ফর্ম সাবমিশন
ফর্ম সাবমিশন হল ব্যবহারকারীর ইনপুট নেওয়া এবং সেই ইনপুট ডেটা সার্ভার বা ব্যাকএন্ড সিস্টেমে প্রক্রিয়া করার প্রক্রিয়া। Vaadin এ ফর্ম সাবমিশন সাধারণত Button কম্পোনেন্টের মাধ্যমে পরিচালিত হয়, যেখানে ব্যবহারকারী "Submit" বাটনে ক্লিক করলে ফর্মের ডেটা প্রসেস হয়। ফর্মে সাধারণত TextField, PasswordField, ComboBox, DatePicker ইত্যাদি উপাদান ব্যবহার করা হয়।
ফর্ম সাবমিশনের উদাহরণ
ধরা যাক, একটি সিম্পল ফর্ম তৈরি করা হয়েছে যেখানে নাম, ইমেইল এবং পাসওয়ার্ড ইনপুট নেওয়া হবে এবং "Submit" বাটনে ক্লিক করলে ফর্মের ডেটা প্রসেস করা হবে।
ডোমেন মডেল
প্রথমে একটি মডেল তৈরি করা যাক:
public class User {
private String name;
private String email;
private String password;
// গেটার এবং সিটার
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
}
ফর্ম তৈরি এবং সাবমিশন
import com.vaadin.flow.component.button.Button;
import com.vaadin.flow.component.textfield.TextField;
import com.vaadin.flow.component.passwordfield.PasswordField;
import com.vaadin.flow.component.notification.Notification;
import com.vaadin.flow.data.binder.Binder;
import com.vaadin.flow.component.orderedlayout.VerticalLayout;
public class UserForm extends VerticalLayout {
public UserForm() {
// UI উপাদান তৈরি
TextField nameField = new TextField("Name");
TextField emailField = new TextField("Email");
PasswordField passwordField = new PasswordField("Password");
Button submitButton = new Button("Submit", event -> handleSubmit(nameField, emailField, passwordField));
// ডেটা বাইন্ডিং এবং ভ্যালিডেশন
Binder<User> binder = new Binder<>(User.class);
binder.bind(nameField, User::getName, User::setName);
binder.bind(emailField, User::getEmail, User::setEmail);
binder.bind(passwordField, User::getPassword, User::setPassword);
// UI তে উপাদানগুলো যোগ করা
add(nameField, emailField, passwordField, submitButton);
}
private void handleSubmit(TextField nameField, TextField emailField, PasswordField passwordField) {
// ডাটা সংগ্রহ এবং প্রসেস
User user = new User();
user.setName(nameField.getValue());
user.setEmail(emailField.getValue());
user.setPassword(passwordField.getValue());
// ডেটা প্রসেসিং (এটি হতে পারে ডাটাবেজে সংরক্ষণ বা অন্য কোন প্রক্রিয়া)
// এখানে আমরা শুধু নোটিফিকেশন দেখাচ্ছি
Notification.show("User details submitted: " + user.getName() + ", " + user.getEmail());
}
}
এখানে কী হচ্ছে?
- UI উপাদান তৈরি: এখানে
TextFieldএবংPasswordFieldব্যবহার করা হয়েছে ফর্ম ইনপুটের জন্য। প্রতিটি ইনপুটের জন্য একটি লেবেলও দেয়া হয়েছে। - Binder ব্যবহার:
Binderক্লাসের মাধ্যমে UI ইনপুট ফিল্ডগুলো এবংUserমডেল ক্লাসের প্রপার্টি (যেমন নাম, ইমেইল, পাসওয়ার্ড) এর মধ্যে ডাটা বাইন্ডিং করা হয়েছে। - Submit Button:
Buttonকম্পোনেন্টটি ব্যবহার করা হয়েছে যা ফর্ম সাবমিট করার জন্য কাজ করে। ব্যবহারকারী যখন "Submit" বাটনে ক্লিক করবেন,handleSubmitমেথডটি কল হবে। - ডাটা প্রসেসিং: ফর্মের ইনপুট ডেটা
Userঅবজেক্টে সংগ্রহ করা হচ্ছে এবং তারপর তা প্রক্রিয়া করা হচ্ছে (এখানে শুধুমাত্র একটি নোটিফিকেশন দেখানো হচ্ছে, কিন্তু সাধারণত এই ডেটা সার্ভারে পাঠানো হয় বা ডাটাবেজে সংরক্ষণ করা হয়)।
ডাটা প্রসেসিং
ফর্ম ডাটা প্রসেসিং হলো ইনপুট ডেটা সংগ্রহ এবং তা প্রক্রিয়া করা, যা সার্ভারে ডেটা পাঠানো বা ডাটাবেজে সংরক্ষণ করার মতো কাজ অন্তর্ভুক্ত করতে পারে। Vaadin-এ সাধারণত এই ধরনের কাজের জন্য REST API, Service Layer, বা Database Connection ব্যবহার করা হয়।
উদাহরণ: সার্ভারে ডেটা পাঠানো
private void handleSubmit(TextField nameField, TextField emailField, PasswordField passwordField) {
// ডেটা সংগ্রহ
User user = new User();
user.setName(nameField.getValue());
user.setEmail(emailField.getValue());
user.setPassword(passwordField.getValue());
// ডেটা প্রসেসিং (এখানে সার্ভারে পাঠানো হবে)
try {
// উদাহরণস্বরূপ, HTTP POST দিয়ে সার্ভারে ডেটা পাঠানো হচ্ছে
HttpResponse<String> response = Unirest.post("https://example.com/api/users")
.header("Content-Type", "application/json")
.body(new ObjectMapper().writeValueAsString(user))
.asString();
if (response.getStatus() == 200) {
Notification.show("User submitted successfully!");
} else {
Notification.show("Failed to submit user details");
}
} catch (Exception e) {
Notification.show("Error: " + e.getMessage());
}
}
এখানে, Unirest HTTP লাইব্রেরি ব্যবহার করে POST রিকোয়েস্ট মাধ্যমে সার্ভারে ডেটা পাঠানো হচ্ছে। এটি একটি উদাহরণ হিসেবে দেওয়া হয়েছে, তবে বাস্তব অ্যাপ্লিকেশনে ডেটাবেজ বা অন্য সার্ভিসের সাথে ইন্টিগ্রেশন করা হতে পারে।
সারাংশ
Vaadin-এ ফর্ম সাবমিশন এবং ডাটা প্রসেসিং প্রক্রিয়া খুবই শক্তিশালী এবং নমনীয়। Binder ব্যবহার করে ডাটা বাইন্ডিং এবং ফর্ম ভ্যালিডেশন সহজ করা হয়, এবং Button ক্লিক করার মাধ্যমে ডেটা প্রসেসিং করা হয়। এই প্রক্রিয়া সঠিকভাবে পরিচালনা করার মাধ্যমে আপনি আপনার অ্যাপ্লিকেশনটিকে আরো ইন্টারঅ্যাকটিভ এবং কার্যকরী করতে পারেন, যা ইউজারের জন্য একটি উন্নত অভিজ্ঞতা সৃষ্টি করবে।
Read more