Tapestry এবং অ্যানোটেশন

Web Development - অ্যাপাচি ট্যাপেস্ট্রি (Apache Tapestry) -

Apache Tapestry একটি শক্তিশালী Java-based web framework, যা Inversion of Control (IoC) এবং Dependency Injection (DI) সমর্থন করে। Tapestry ফ্রেমওয়ার্কে অ্যানোটেশন ব্যবহার করা হয়, যা কোডকে পরিষ্কার এবং কমপ্যাক্ট রাখে, এবং ডেভেলপারদের কাজ আরও সহজ করে তোলে। এই অ্যানোটেশনগুলো কোডের বিভিন্ন অংশে ব্যবহার করা যায়, যেমন সার্ভিস বাইনডিং, ডেটা বাউন্ডিং, লজিক পরিচালনা, এবং ইউজার ইন্টারফেস টেমপ্লেটের সাথে কাজ করা।

এই টিউটোরিয়ালে, আমরা Tapestry ফ্রেমওয়ার্কে অ্যানোটেশন ব্যবহার করার বিভিন্ন পদ্ধতি এবং কিভাবে এগুলি সার্ভিস, পেজ, এবং ফর্মের মধ্যে কাজ করতে সাহায্য করে তা দেখব।


Tapestry অ্যানোটেশনগুলির প্রধান ব্যবহার

  1. @Property

    • @Property অ্যানোটেশনটি Tapestry ফ্রেমওয়ার্কের মাধ্যমে ডেটা বাউন্ডিং করার জন্য ব্যবহৃত হয়। এটি ক্লাসের ফিল্ডে প্রয়োগ করা হয়, যার মাধ্যমে Tapestry অটোমেটিকভাবে সেই ফিল্ডের মান UI (কম্পোনেন্ট) এর সাথে বাউন্ড করে।

    উদাহরণ:

    public class Login {
        @Property
        private String username;
        @Property
        private String password;
    }
    

    এখানে:

    • username এবং password ফিল্ড দুটি Tapestry কম্পোনেন্টের (যেমন t:textfield বা t:passwordfield) সাথে বাউন্ড হবে।
  2. @Inject

    • @Inject অ্যানোটেশনটি Tapestry IoC কন্টেইনার থেকে নির্দিষ্ট সার্ভিস ইন্সট্যান্স ইনজেক্ট করতে ব্যবহৃত হয়। এই অ্যানোটেশনটি Tapestry সার্ভিস ক্লাসের ভেতর প্রয়োগ করা হয়, যেখানে আপনি নির্দিষ্ট সার্ভিস ইনজেক্ট করতে চান।

    উদাহরণ:

    public class MyServiceUser {
        @Inject
        private MyService myService;
    }
    

    এখানে:

    • MyService একটি Tapestry সার্ভিস, যা @Inject অ্যানোটেশন দিয়ে ক্লাসে ইনজেক্ট করা হয়েছে।
  3. @ActivationContext

    • @ActivationContext অ্যানোটেশনটি ব্যবহার করে আপনি Tapestry পেজের জন্য ভেরিয়েবলগুলোর মধ্যে ডেটা শেয়ার করতে পারেন। এটি সাধারণত URL প্যারামিটার বা URL এর অংশ হিসেবে ডেটা পাস করার জন্য ব্যবহৃত হয়।

    উদাহরণ:

    @ActivationContext
    @Property
    private String itemId;
    

    এখানে:

    • itemId প্যারামিটারটি URL এর মাধ্যমে পাস করা হবে এবং Tapestry অটোমেটিকভাবে এটি ইনজেক্ট করবে।
  4. @OnEvent

    • @OnEvent অ্যানোটেশনটি ব্যবহার করা হয় ইভেন্ট হ্যান্ডলিংয়ের জন্য। এটি ক্লাসে মেথডের ওপর প্রয়োগ করা হয় যাতে একটি নির্দিষ্ট ইভেন্ট বা অ্যাকশন (যেমন ফর্ম সাবমিশন) হ্যান্ডল করা যায়।

    উদাহরণ:

    @OnEvent(value = "submit", component = "submitButton")
    public Object onSubmit() {
        // ফর্ম সাবমিটের জন্য কার্যক্রম
        return SuccessPage.class;
    }
    

    এখানে:

    • @OnEvent অ্যানোটেশনটি submitButton কম্পোনেন্টের উপর ইভেন্ট হ্যান্ডলিংয়ের জন্য ব্যবহৃত হয়েছে, যা ফর্ম সাবমিট হওয়ার পর কল হবে।
  5. @Service

    • @Service অ্যানোটেশনটি Tapestry এর সার্ভিস ক্লাসে প্রয়োগ করা হয়। এটি Tapestry সার্ভিস রেজিস্ট্রিতে সরাসরি সার্ভিস হিসাবে নিবন্ধিত হয়, এবং অন্য ক্লাসে এটি ইনজেক্ট করা সম্ভব হয়।

    উদাহরণ:

    @Service
    public class MyService {
        public String performAction() {
            return "Action performed!";
        }
    }
    

    এখানে:

    • @Service অ্যানোটেশনটি MyService ক্লাসকে Tapestry সার্ভিস হিসেবে নিবন্ধিত করে, যাতে অন্যান্য ক্লাসে এটি ইনজেক্ট করা যায়।

Tapestry অ্যানোটেশন ব্যবহারের সুবিধা

  1. Code Readability and Cleanliness
    • অ্যানোটেশন ব্যবহারে কোডের পড়তে সহজ হয়। ডেভেলপারদের কোডে স্পষ্ট নির্দেশনা দেয় এবং কোডের গঠন পরিষ্কার রাখে।
  2. Automatic Dependency Injection
    • @Inject এবং @Service অ্যানোটেশন ব্যবহার করে Tapestry স্বয়ংক্রিয়ভাবে নির্দিষ্ট সার্ভিসগুলিকে ইনজেক্ট করে, ফলে সার্ভিস ম্যানেজমেন্ট আরও সহজ এবং ক্লিন হয়।
  3. Declarative Event Handling
    • @OnEvent অ্যানোটেশন ব্যবহার করে ইভেন্ট হ্যান্ডলিং ঘোষণা করা যায়, যা কোডের পাঠযোগ্যতা বাড়ায় এবং কোডের মধ্যে সরাসরি ইভেন্ট হ্যান্ডলিং প্রক্রিয়া দেখতে সহায়তা করে।
  4. Binding and Contextual Variables
    • @Property এবং @ActivationContext অ্যানোটেশন দিয়ে ডেটা বাউন্ডিং করা এবং পেজের মধ্যে ভেরিয়েবল শেয়ার করা আরও সহজ হয়।
  5. Less Boilerplate Code
    • অ্যানোটেশন ব্যবহার করলে ডেভেলপারদের কম কনফিগারেশন এবং কম কোড লিখতে হয়, যা কোডের গঠন আরও সহজ এবং কমপ্যাক্ট রাখে।

সারাংশ

Tapestry এবং অ্যানোটেশন হল একটি শক্তিশালী সমন্বয়, যা ডেভেলপারদের জন্য কোড লেখার প্রক্রিয়াকে সহজ, পরিষ্কার এবং কার্যকর করে তোলে। Tapestry ফ্রেমওয়ার্কে বিভিন্ন অ্যানোটেশন যেমন @Inject, @Property, @Service, @OnEvent এবং @ActivationContext ব্যবহার করে ডেটা বাউন্ডিং, সার্ভিস ইনজেকশন, ইভেন্ট হ্যান্ডলিং, এবং প্রপার্টি ম্যানেজমেন্ট সহজ করা যায়। এগুলি কোডের গঠন সহজ করে এবং ডেভেলপারদের দ্রুত ও কার্যকর অ্যাপ্লিকেশন ডেভেলপমেন্টে সহায়ক।

Content added By

Tapestry এর Built-in অ্যানোটেশনসমূহ

Apache Tapestry একটি শক্তিশালী Java-based web framework, যা Component-Oriented Programming (COP) এবং Inversion of Control (IOC) ব্যবহারের মাধ্যমে ইউজার ইন্টারফেস ডেভেলপমেন্ট সহজ করে। Tapestry-এর অনেক সুবিধা রয়েছে এবং এর মধ্যে অন্যতম হল annotations বা অ্যানোটেশনসমূহ। Tapestry এর built-in অ্যানোটেশনগুলি আপনার অ্যাপ্লিকেশনকে আরও শক্তিশালী, নমনীয় এবং সহজভাবে কনফিগার করার সুযোগ প্রদান করে।

এখানে Tapestry এর কিছু গুরুত্বপূর্ণ built-in অ্যানোটেশন এবং তাদের ব্যবহারের উদাহরণ দেওয়া হলো:


১. @Property

@Property অ্যানোটেশনটি JavaBeans property হিসেবে একটি ফিল্ড ডিফাইন করার জন্য ব্যবহৃত হয়। Tapestry এর automatic data binding সুবিধার মাধ্যমে এই অ্যানোটেশনটি কম্পোনেন্ট এবং পেজগুলির মধ্যে ডেটা পাঠাতে ব্যবহৃত হয়।

ব্যবহার:

@Property
private String username;

এখানে, username ফিল্ডটি Tapestry এর data binding এর মাধ্যমে পেজের সাথে যুক্ত হতে পারে, যেমন input field এর মান।


২. @Inject

@Inject অ্যানোটেশনটি Tapestry-এর Dependency Injection (DI) ব্যবস্থার অংশ। এটি services বা অন্য কোনো নির্ভরশীল কম্পোনেন্ট বা ক্লাস ইনজেক্ট করতে ব্যবহৃত হয়।

ব্যবহার:

@Inject
private MyService myService;

এখানে, MyService হল একটি সার্ভিস, যা Tapestry এর Service Registry থেকে ইনজেক্ট করা হবে।


৩. @SessionState

@SessionState অ্যানোটেশনটি session-scoped অবজেক্ট বা ডেটা ইনজেক্ট করতে ব্যবহৃত হয়। এটি সাধারণত user session এর জন্য ব্যবহৃত হয়।

ব্যবহার:

@SessionState
private User currentUser;

এটি currentUser ফিল্ডটি HTTP সেশনে স্টোর করে, যাতে সেশন চলাকালীন বিভিন্ন পেজে ব্যবহারকারী সম্পর্কিত তথ্য পাওয়া যায়।


৪. @Persist

@Persist অ্যানোটেশনটি একটি ভ্যারিয়েবলকে persistent বা স্থায়ী করে রাখার জন্য ব্যবহৃত হয়। Tapestry-এর এই অ্যানোটেশনটি ব্যবহার করে আপনি ডেটা সেশন বা কুকিতে সংরক্ষণ করতে পারেন, যাতে পেজ রিফ্রেশ বা ইউজার অন্য পেজে যাওয়ার পরও ডেটা বজায় থাকে।

ব্যবহার:

@Persist
private String searchQuery;

এটি searchQuery ভ্যারিয়েবলটিকে বিভিন্ন পেজ এবং রিফ্রেশে বজায় রাখতে সহায়ক।


৫. @InjectService

@InjectService অ্যানোটেশনটি Tapestry-এর service layer এর মধ্যে নির্দিষ্ট সার্ভিস ইনজেক্ট করতে ব্যবহৃত হয়। এটি সাধারণত Service Registry থেকে সার্ভিস ইনজেক্ট করার জন্য ব্যবহৃত হয়।

ব্যবহার:

@InjectService
private MyDatabaseService dbService;

এটি MyDatabaseService কে Tapestry এর Service Registry থেকে ইনজেক্ট করে, যাতে সার্ভিসটি সহজে ব্যবহৃত হতে পারে।


৬. @OnEvent

@OnEvent অ্যানোটেশনটি Tapestry-এর event handling এর জন্য ব্যবহৃত হয়। এটি একটি নির্দিষ্ট কম্পোনেন্টের বা পেজের ইভেন্ট হ্যান্ডলার হিসেবে কাজ করে। সাধারণত AJAX সাবমিশন বা ব্যবহারকারীর ইন্টারঅ্যাকশনের জন্য এটি ব্যবহৃত হয়।

ব্যবহার:

@OnEvent(value = "submit", component = "submitButton")
public Object onSubmit() {
    // হ্যান্ডলিং কোড
    return "success";
}

এটি submitButton এর সাবমিট ইভেন্ট হ্যান্ডল করবে এবং onSubmit() মেথডটি কল করবে।


৭. @SetupRender

@SetupRender অ্যানোটেশনটি Tapestry পেজ রেন্ডারিং প্রক্রিয়ার আগে একটি মেথডকে কল করার জন্য ব্যবহৃত হয়। এটি পেজ লোড হওয়ার আগে কোনও সেটআপ কোড এক্সিকিউট করার জন্য আদর্শ।

ব্যবহার:

@SetupRender
public void setup() {
    // রেন্ডারিং আগে যেকোনো সেটআপ
}

এটি পেজ রেন্ডারিং এর আগে কোড চালাতে ব্যবহার করা হয়।


৮. @ActivationContext

@ActivationContext অ্যানোটেশনটি কম্পোনেন্টের জন্য URL parameters বা প্যারামিটার ইনজেক্ট করতে ব্যবহৃত হয়। এটি সাধারণত URL প্যারামিটারগুলোর মান অ্যাক্সেস করার জন্য ব্যবহৃত হয়।

ব্যবহার:

@ActivationContext
private String productId;

এটি productId ইনপুট প্যারামিটারটি ইনজেক্ট করবে, যা URL থেকে নেওয়া হবে।


৯. @AppModule

@AppModule অ্যানোটেশনটি Tapestry-এর application module ডিফাইন করার জন্য ব্যবহৃত হয়। এটি Tapestry অ্যাপ্লিকেশনটির সার্ভিস, ফিল্টার এবং অন্যান্য কনফিগারেশন উপাদান যুক্ত করতে সাহায্য করে।

ব্যবহার:

@AppModule
public class AppModule {
    // সার্ভিস কনফিগারেশন বা বাইনডিং
}

সারাংশ

Tapestry ফ্রেমওয়ার্কে built-in annotations ব্যবহারের মাধ্যমে ডেভেলপাররা সহজেই dependency injection, event handling, data binding, এবং UI component management করতে পারেন। এই অ্যানোটেশনগুলি আপনার কোডকে আরও পরিষ্কার, মডুলার এবং সহজে পরিচালনাযোগ্য করে তোলে। Tapestry-এর অ্যানোটেশন ব্যবহারের মাধ্যমে আপনি জটিল কার্যক্রমকে আরও সহজ এবং স্বয়ংক্রিয়ভাবে সম্পন্ন করতে পারবেন।

Content added By

কাস্টম অ্যানোটেশন তৈরি এবং ব্যবহার করা

Apache Tapestry একটি শক্তিশালী Java-based framework, যা ডেভেলপারদের জন্য কাস্টম অ্যানোটেশন তৈরি এবং ব্যবহার করার ক্ষমতা প্রদান করে। Tapestry এর অ্যানোটেশনগুলি অনেক ধরনের কার্যকারিতা বাস্তবায়ন করতে সাহায্য করে, যেমন ফর্ম ভ্যালিডেশন, লজিক্যাল কনফিগারেশন, এবং ডিপেন্ডেন্সি ইনজেকশন। আপনি যদি টেপেস্ট্রির মধ্যে আরও কাস্টম কার্যকারিতা যোগ করতে চান, তবে কাস্টম অ্যানোটেশন তৈরি করা খুবই উপকারী হতে পারে।

এই টিউটোরিয়ালে, আমরা কাস্টম অ্যানোটেশন তৈরি করার পদ্ধতি এবং তা কিভাবে Tapestry প্রজেক্টে ব্যবহার করতে হয় তা দেখব।


কাস্টম অ্যানোটেশন তৈরি এবং ব্যবহার

ধাপ ১: কাস্টম অ্যানোটেশন তৈরি করা

Java তে একটি কাস্টম অ্যানোটেশন তৈরি করতে, প্রথমে আপনাকে একটি সাধারণ annotation interface তৈরি করতে হবে। Tapestry এর মধ্যে কাস্টম অ্যানোটেশন তৈরির জন্য, আপনি সেই অ্যানোটেশনটির উপর ভিত্তি করে কোনো নির্দিষ্ট আচরণ (behavior) যুক্ত করতে পারেন।

উদাহরণ:

ধরা যাক, আপনি একটি কাস্টম অ্যানোটেশন তৈরি করতে চান যা একটি ফিল্ডের উপর একটি minLength ভ্যালিডেশন প্রয়োগ করবে। এতে ফিল্ডের মান যদি minLength এর চেয়ে কম হয়, তবে তা বৈধ হবে না।

  1. CustomValidation.java (কাস্টম অ্যানোটেশন):
package com.example.annotations;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

// Define the annotation for fields (ElementType.FIELD)
@Target(ElementType.FIELD)
@Retention(RetentionPolicy.RUNTIME)
public @interface CustomValidation {
    int minLength() default 5;  // Minimum length for the field value
}
  • @Target(ElementType.FIELD): এটি নির্দেশ করে যে এই অ্যানোটেশনটি শুধুমাত্র ফিল্ডে ব্যবহার করা হবে।
  • @Retention(RetentionPolicy.RUNTIME): এটি নিশ্চিত করে যে অ্যানোটেশনটি রানটাইমে উপলব্ধ থাকবে।

এই অ্যানোটেশনটি আমরা Tapestry ফিল্ডগুলিতে ব্যবহার করতে পারব।


ধাপ ২: কাস্টম অ্যানোটেশন লজিক তৈরি করা

এখন, আমরা কাস্টম অ্যানোটেশনটির জন্য validation logic তৈরি করব। আমরা একটি service তৈরি করব যা আমাদের কাস্টম অ্যানোটেশন প্রক্রিয়া করবে এবং যাচাই করবে যে ইনপুট ফিল্ডের মান সঠিক কিনা।

  1. CustomValidationService.java (কাস্টম ভ্যালিডেশন সার্ভিস):
package com.example.services;

import com.example.annotations.CustomValidation;
import org.apache.tapestry5.annotations.Inject;
import org.apache.tapestry5.ioc.annotations.UsesServices;

import java.lang.reflect.Field;

@UsesServices(ValidationService.class)
public class CustomValidationService {

    // Inject a Tapestry service or any other needed service here
    @Inject
    private ValidationService validationService;

    // Method to validate fields with the CustomValidation annotation
    public void validate(Object object) throws IllegalAccessException {
        // Iterate over fields of the given object
        for (Field field : object.getClass().getDeclaredFields()) {
            // Check if the field is annotated with @CustomValidation
            if (field.isAnnotationPresent(CustomValidation.class)) {
                CustomValidation validation = field.getAnnotation(CustomValidation.class);
                field.setAccessible(true);
                String fieldValue = (String) field.get(object); // get the value of the field
                // Validate the field value based on the minLength constraint
                if (fieldValue != null && fieldValue.length() < validation.minLength()) {
                    throw new IllegalArgumentException("Field " + field.getName() + " must have at least " + validation.minLength() + " characters.");
                }
            }
        }
    }
}
  • validate মেথড: এই মেথডটি ইনপুট object এর প্রতিটি ফিল্ড পরীক্ষা করে, এবং যদি কোনো ফিল্ডে CustomValidation অ্যানোটেশন থাকে, তবে এটি সেই ফিল্ডের ভ্যালু যাচাই করে।
  • যদি ভ্যালু minLength এর চেয়ে কম হয়, তবে একটি IllegalArgumentException ছুড়ে দেয়া হবে।

ধাপ ৩: কাস্টম অ্যানোটেশন ব্যবহার করা

এখন, আমাদের তৈরি কাস্টম অ্যানোটেশন ব্যবহার করতে হবে। আমরা একটি Java ক্লাস তৈরি করব যেখানে ফিল্ডগুলো কাস্টম অ্যানোটেশনের সাথে ব্যবহার করা হবে।

  1. User.java (ফিল্ডে কাস্টম অ্যানোটেশন ব্যবহার):
package com.example.pages;

import com.example.annotations.CustomValidation;
import org.apache.tapestry5.annotations.Property;

public class User {

    @Property
    @CustomValidation(minLength = 8)  // Applying custom validation with a minimum length of 8
    private String username;

    @Property
    @CustomValidation(minLength = 6)  // Minimum length 6 for password
    private String password;

    // Getter and Setter for username and password
    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;
    }
}

এখানে:

  • @CustomValidation অ্যানোটেশনটি username এবং password ফিল্ডে ব্যবহার করা হয়েছে। এতে minLength সেট করা হয়েছে যাতে ফিল্ডের ভ্যালু কমপক্ষে ৮ এবং ৬ অক্ষরের হতে হবে।

ধাপ ৪: কাস্টম অ্যানোটেশন যাচাই করা

এখন, আপনাকে এই কাস্টম অ্যানোটেশন যাচাই করার জন্য একটি মেথড তৈরি করতে হবে, যা Tapestry সিস্টেমে ব্যবহৃত হবে।

  1. UserService.java (কাস্টম ভ্যালিডেশন সার্ভিস কল করা):
package com.example.services;

import com.example.pages.User;
import org.apache.tapestry5.ioc.annotations.Inject;

public class UserService {

    @Inject
    private CustomValidationService customValidationService;  // Injecting custom validation service

    public void validateUser(User user) throws IllegalAccessException {
        customValidationService.validate(user);  // Call the custom validation service
    }
}
  • এই মেথডটি User অবজেক্টটি গ্রহণ করে এবং CustomValidationService এর validate মেথড কল করে, যাতে ফিল্ডগুলির ভ্যালিডেশন করা যায়।

সারাংশ

এখন আপনি জানেন কিভাবে Tapestry ফ্রেমওয়ার্কে কাস্টম অ্যানোটেশন তৈরি এবং ব্যবহার করতে হয়। এই প্রক্রিয়াতে:

  1. একটি কাস্টম অ্যানোটেশন তৈরি করা হয়েছে যা নির্দিষ্ট ফিল্ডের জন্য minLength চেক করে।
  2. একটি কাস্টম সার্ভিস তৈরি করা হয়েছে যা অ্যানোটেশনটির সাহায্যে ডেটা ভ্যালিডেশন পরিচালনা করে।
  3. সিস্টেমে কাস্টম অ্যানোটেশন ব্যবহার করে ফিল্ডের উপর ভ্যালিডেশন প্রক্রিয়া করা হয়েছে।

Tapestry-তে কাস্টম অ্যানোটেশন তৈরি করার মাধ্যমে আপনি আপনার অ্যাপ্লিকেশনকে আরও নমনীয়, শক্তিশালী এবং নিরাপদ করতে পারেন।

Content added By

অ্যানোটেশনের মাধ্যমে ফিল্ড এবং মেথড কনফিগারেশন

Java অ্যানোটেশন একটি শক্তিশালী বৈশিষ্ট্য, যা কোডের মধ্যে অতিরিক্ত মেটাডেটা যোগ করতে এবং প্রক্রিয়া পরিচালনা করতে ব্যবহৃত হয়। Apache Tapestry তে, আপনি অ্যানোটেশনের মাধ্যমে ফিল্ড এবং মেথড কনফিগারেশন করতে পারেন। Tapestry বিভিন্ন ধরনের অ্যানোটেশন সরবরাহ করে, যেমন Dependency Injection, Event Handling, এবং Validation। এখানে আমরা কাস্টম অ্যানোটেশন ব্যবহার করে ফিল্ড এবং মেথড কনফিগারেশন করার পদ্ধতি ব্যাখ্যা করব।


ধাপ ১: অ্যানোটেশন ব্যবহার করে ফিল্ড কনফিগারেশন

Tapestry-তে ফিল্ড কনফিগারেশন করতে অ্যানোটেশন ব্যবহার করা একটি সাধারণ পদ্ধতি। ফিল্ডগুলিতে অ্যানোটেশন ব্যবহার করে ডেটা ভ্যালিডেশন, ডিপেন্ডেন্সি ইনজেকশন, এবং আরও অনেক কাজ করা যায়।

উদাহরণ: ফিল্ডে ডিপেন্ডেন্সি ইনজেকশন

Tapestry ফ্রেমওয়ার্কে @Inject অ্যানোটেশন ব্যবহার করে ফিল্ডে ডিপেন্ডেন্সি ইনজেক্ট করা হয়। এর মাধ্যমে আপনি সহজেই সার্ভিস বা অন্য ক্লাসের অবজেক্ট ইনজেক্ট করতে পারেন।

  1. Java ক্লাস (Service.java):
package com.example.services;

public class Service {
    public String getServiceInfo() {
        return "This is a service.";
    }
}
  1. Java ক্লাস (MyPage.java):
package com.example.pages;

import com.example.services.Service;
import org.apache.tapestry5.annotations.Inject;

public class MyPage {

    @Inject
    private Service service;  // Injecting the Service class instance

    public String getServiceInfo() {
        return service.getServiceInfo();  // Using the injected service
    }
}

এখানে:

  • @Inject অ্যানোটেশন ব্যবহার করে Service ক্লাসের ইনস্ট্যান্স MyPage ক্লাসে ইনজেক্ট করা হয়েছে। Tapestry ফ্রেমওয়ার্ক এটি স্বয়ংক্রিয়ভাবে ম্যানেজ করে।

ধাপ ২: অ্যানোটেশন ব্যবহার করে মেথড কনফিগারেশন

Tapestry তে মেথড কনফিগারেশন করার জন্য অ্যানোটেশন ব্যবহার করা হয়। মেথড অ্যানোটেশনগুলি সাধারণত ইভেন্ট হ্যান্ডলিং, অ্যাকশন ট্রিগার, এবং অন্যান্য কার্যকলাপ পরিচালনা করতে ব্যবহৃত হয়।

উদাহরণ: মেথডে ইভেন্ট হ্যান্ডলিং

Tapestry তে মেথডে @OnEvent অ্যানোটেশন ব্যবহার করে আপনি ব্যবহারকারীর ইন্টারঅ্যাকশনের জন্য ইভেন্ট হ্যান্ডলিং করতে পারেন।

  1. Java ক্লাস (MyPage.java):
package com.example.pages;

import org.apache.tapestry5.annotations.OnEvent;

public class MyPage {

    private String username;

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    // Handle the form submission event
    @OnEvent(value = "submit", component = "loginButton")
    public String onLogin() {
        // Simulating login validation
        if ("admin".equals(username)) {
            return "Welcome, " + username;
        } else {
            return "Invalid username.";
        }
    }
}

এখানে:

  • @OnEvent অ্যানোটেশন ব্যবহার করা হয়েছে, যা "submit" ইভেন্টটি loginButton থেকে গ্রহন করে onLogin() মেথডকে কল করবে।
  • মেথডের মধ্যে, username এর মান যাচাই করা হচ্ছে এবং লগইন সফল হলে একটি বার্তা প্রদর্শন করা হচ্ছে।

ধাপ ৩: কাস্টম অ্যানোটেশন ব্যবহার

Tapestry তে আপনি কাস্টম অ্যানোটেশন তৈরি করে আপনার নিজের ফিল্ড এবং মেথড কনফিগারেশন যুক্ত করতে পারেন। এটি আপনাকে আপনার প্রয়োজনীয় কার্যকারিতা বাস্তবায়ন করতে সহায়তা করবে।

উদাহরণ: কাস্টম অ্যানোটেশন

ধরা যাক, আপনি একটি কাস্টম অ্যানোটেশন তৈরি করতে চান যা ফিল্ডের minLength চেক করবে।

  1. CustomValidation.java (কাস্টম অ্যানোটেশন):
package com.example.annotations;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

@Target(ElementType.FIELD)
@Retention(RetentionPolicy.RUNTIME)
public @interface CustomValidation {
    int minLength() default 5;
}
  • @Target(ElementType.FIELD): এটি নির্দেশ করে যে এই অ্যানোটেশনটি শুধুমাত্র ফিল্ডে ব্যবহার করা হবে।
  • @Retention(RetentionPolicy.RUNTIME): এটি নিশ্চিত করে যে অ্যানোটেশনটি রানটাইমে উপলব্ধ থাকবে।
  1. User.java (কাস্টম অ্যানোটেশন ব্যবহার):
package com.example.pages;

import com.example.annotations.CustomValidation;
import org.apache.tapestry5.annotations.Property;

public class User {

    @Property
    @CustomValidation(minLength = 8)  // Applying custom validation with a minimum length of 8
    private String username;

    @Property
    @CustomValidation(minLength = 6)  // Minimum length 6 for password
    private String password;

    // Getter and Setter for username and password
    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;
    }
}

এখানে:

  • @CustomValidation অ্যানোটেশন ব্যবহার করা হয়েছে username এবং password ফিল্ডে, যাতে তাদের minLength নিশ্চিত করা যায়।

ধাপ ৪: কাস্টম অ্যানোটেশন লজিক প্রয়োগ

এখন, আপনি আপনার কাস্টম অ্যানোটেশনটির জন্য validation logic তৈরি করবেন, যা ফিল্ডগুলির ভ্যালিডেশন করবে।

  1. CustomValidationService.java (কাস্টম ভ্যালিডেশন সার্ভিস):
package com.example.services;

import com.example.annotations.CustomValidation;
import java.lang.reflect.Field;

public class CustomValidationService {

    // Method to validate fields with the CustomValidation annotation
    public void validate(Object object) throws IllegalAccessException {
        // Iterate over fields of the given object
        for (Field field : object.getClass().getDeclaredFields()) {
            // Check if the field is annotated with @CustomValidation
            if (field.isAnnotationPresent(CustomValidation.class)) {
                CustomValidation validation = field.getAnnotation(CustomValidation.class);
                field.setAccessible(true);
                String fieldValue = (String) field.get(object); // get the value of the field
                // Validate the field value based on the minLength constraint
                if (fieldValue != null && fieldValue.length() < validation.minLength()) {
                    throw new IllegalArgumentException("Field " + field.getName() + " must have at least " + validation.minLength() + " characters.");
                }
            }
        }
    }
}

এখানে:

  • validate মেথডটি ইনপুট অবজেক্টের সকল ফিল্ড পরীক্ষা করে এবং CustomValidation অ্যানোটেশন প্রযোজ্য ফিল্ডের জন্য ভ্যালিডেশন কার্যকর করে।

সারাংশ

Tapestry তে অ্যানোটেশন ব্যবহার করে ফিল্ড এবং মেথড কনফিগারেশন করা খুবই সহজ এবং কার্যকর। আপনি @Inject বা @OnEvent অ্যানোটেশন ব্যবহার করে সার্ভিস ইনজেকশন এবং ইভেন্ট হ্যান্ডলিং করতে পারেন, এবং কাস্টম অ্যানোটেশন তৈরি করে আপনার নিজস্ব ভ্যালিডেশন এবং কার্যকারিতা যোগ করতে পারেন। অ্যানোটেশন ব্যবহার করার মাধ্যমে, কোড আরও পরিষ্কার, সহজ এবং রিইউজেবল হয়।

Content added By
Promotion