Рубрики
Без рубрики

Вступление к гобелену Apache

Узнайте о веб-фреймворке Apache Tapestry и создайте простое веб-приложение, используя основные функции, которые он предоставляет

Автор оригинала: baeldung.

1. Обзор

В настоящее время, от социальных сетей до банковского дела, здравоохранения и государственных услуг, все виды деятельности доступны онлайн. Поэтому они в значительной степени полагаются на веб-приложения.

Веб-приложение позволяет пользователям использовать/пользоваться онлайн-услугами, предоставляемыми компанией. В то же время он выступает в качестве интерфейса для внутреннего программного обеспечения.

В этом вводном руководстве мы рассмотрим веб-фреймворк Apache Tapestry и создадим простое веб-приложение, используя основные функции, которые он предоставляет.

2. Гобелен Apache

Apache Tapestry-это платформа на основе компонентов для создания масштабируемых веб-приложений.

Он следует парадигме convention-over-configuration и использует аннотации и соглашения об именах для конфигураций.

Все компоненты являются простыми POJOs. В то же время они разрабатываются с нуля и не зависят от других библиотек.

Наряду с поддержкой Ajax, Tapestry также обладает большими возможностями для создания отчетов об исключениях. Он также предоставляет обширную библиотеку встроенных общих компонентов.

Среди других замечательных функций следует отметить горячую перезагрузку кода. Поэтому, используя эту функцию, мы можем мгновенно видеть изменения в среде разработки.

3. Настройка

Apache Tapestry требует простого набора инструментов для создания веб-приложения:

  • Java 1.6 или более поздней версии
  • Инструмент сборки (Maven или Gradle)
  • IDE (Eclipse или IntelliJ)
  • Сервер приложений (Tomcat или Jetty)

В этом уроке мы будем использовать комбинацию Java 8, Maven, Eclipse и Jetty Server.

Чтобы настроить последний проект Apache Tapestry, мы будем использовать Maven archetype и следовать инструкциям , предоставленным официальной документацией:

$ mvn archetype:generate -DarchetypeCatalog=http://tapestry.apache.org

Или, если у нас есть существующий проект, мы можем просто добавить зависимость tapestry-core Maven в pom.xml :


    org.apache.tapestry
    tapestry-core
    5.4.5

Как только мы будем готовы с настройкой, мы можем запустить приложение apache-tapestry с помощью следующей команды Maven:

$ mvn jetty:run

По умолчанию приложение будет доступно по адресу localhost:8080/apache-tapestry :

4. Структура проекта

Давайте рассмотрим макет проекта, созданный Apache Tapestry:

Мы видим структуру проекта, похожую на Maven, а также несколько пакетов, основанных на соглашениях.

Классы Java помещаются в src/main/java и классифицируется как компоненты , страницы , и услуги.

Аналогично, src/main/resources содержит наши шаблоны (похожие на HTML-файлы) — они имеют расширение .tml .

Для каждого класса Java, помещенного в компоненты и страницы каталоги, файл шаблона с тем же именем должен быть создан.

Каталог src/main/webapp содержит такие ресурсы, как изображения, таблицы стилей и файлы JavaScript. Аналогично, файлы тестирования помещаются в src/test .

Наконец, src/site будет содержать файлы документации.

Для лучшего понимания давайте взглянем на структуру проекта, открытую в Eclipse IDE:

5. Аннотации

Давайте обсудим несколько удобных аннотаций , предоставляемых Apache Tapestry для повседневного использования. В дальнейшем мы будем использовать эти аннотации в наших реализациях.

5.1. @Inject

Аннотация @Inject доступна в пакете org.apache.tapestry5.ioc.annotations и обеспечивает простой способ введения зависимостей в классы Java.

Эта аннотация очень удобна для введения актива, блока, ресурса и службы.

5.2. @InjectPage

Доступная в пакете org.apache.tapestry5.annotations , аннотация @InjectPage позволяет нам вставлять страницу в другой компонент. Кроме того, введенная страница всегда доступна только для чтения.

5.3. @InjectComponent

Аналогично, аннотация @InjectComponent позволяет нам вводить компонент, определенный в шаблоне.

5.4. @Log

Аннотация @Log доступна в пакете org.apache.tapestry5.annotations и удобна для включения регистрации уровня ОТЛАДКИ в любом методе. Он регистрирует вход и выход метода, а также значения параметров.

5.5. @Property

Доступная в пакете org.apache.tapestry5.annotations , аннотация @Property помечает поле как свойство. В то же время он автоматически создает геттеры и сеттеры для свойства.

5.6. Параметр @

Аналогично, аннотация @Parameter обозначает, что поле является параметром компонента.

6. Страница

Итак, мы все готовы изучить основные функции фреймворка. Давайте создадим новую домашнюю страницу в нашем приложении.

Сначала мы определим класс Java Home в каталоге pages в каталоге src/main/java :

public class Home {
}

6.1. Шаблон

Затем мы создадим соответствующий Home.html шаблон в каталоге pages в разделе src/main/resources .

Файл с расширением .tml (Язык разметки Tapestry) похож на файл HTML/XHTML с разметкой XML, предоставляемой Apache Tapestry.

Например, давайте взглянем на Home.html шаблон:


    
        apache-tapestry Home
    
    
        

Home

Вуаля! Просто перезапустив сервер Jetty, мы можем получить доступ к странице Home на localhost:8080/apache-tapestry/home :

6.2. Собственность

Давайте рассмотрим, как отобразить свойство на странице Home .

Для этого мы добавим свойство и метод getter в класс Home :

@Property
private String appName = "apache-tapestry";

public Date getCurrentTime() {
    return new Date();
}

Чтобы отобразить свойство AppName на странице Home , мы можем просто использовать ${AppName} .

Аналогично, мы можем написать ${текущее время} для доступа к методу getCurrentTime со страницы.

6.3. Локализация

Apache Tapestry обеспечивает интегрированную локализацию поддержку. В соответствии с соглашением файл свойств имени страницы хранит список всех локальных сообщений, которые будут отображаться на странице.

Например, мы создадим файл home.properties в каталоге pages для страницы Home с локальным сообщением:

introMsg=Welcome to the Apache Tapestry Tutorial

Свойства сообщения отличаются от свойств Java.

По той же причине имя ключа с префиксом message используется для отображения свойства сообщения — например, ${message:introMsg}.

6.4. Компонент компоновки

Давайте определим базовый компонент макета, создав макет .java класс. Мы будем хранить файл в каталоге components в src/main/java :

public class Layout {
    @Property
    @Parameter(required = true, defaultPrefix = BindingConstants.LITERAL)
    private String title;
}

Здесь свойство title помечено как обязательное, а префикс по умолчанию для привязки задан как литерал String .

Затем мы напишем соответствующий файл шаблона Layout.html в каталоге компоненты в каталоге src/main/ресурсы :


    
        ${title}
    
    
        

© Your Company

Теперь давайте использовать макет на странице home :


    

Home! ${appName}

${message:introMsg}

${currentTime}

Обратите внимание, что пространство имен используется для идентификации элементов ( t:type и t:body ), предоставляемых Apache Tapestry. В то же время пространство имен также предоставляет компоненты и атрибуты.

Здесь t:type установит макет на странице home . И элемент t:body вставит содержимое страницы.

Давайте взглянем на страницу Home с макетом:

7. Форма

Давайте создадим страницу Login с формой, позволяющей пользователям входить в систему.

Как уже говорилось, сначала мы создадим класс Java Login :

public class Login {
    // ...
    @InjectComponent
    private Form login;

    @Property
    private String email;

    @Property
    private String password;
}

Здесь мы определили два свойства — email и пароль . Кроме того, мы ввели компонент Form для входа в систему.

Затем давайте создадим соответствующий шаблон login.html :


    
        

Please sign in

Теперь мы можем получить доступ к странице login на localhost:8080/apache-tapestry/login :

8. Валидация

Apache Tapestry предоставляет несколько встроенных методов для проверки формы . Он также предоставляет способы обработки успешного или неудачного представления формы.

Встроенный метод следует условию события и имени компонента. Например, метод on Validation From Login проверит компонент Login .

Аналогично, такие методы, как on Success From Login и on Failure From Login , предназначены для событий успеха и сбоя соответственно.

Итак, давайте добавим эти встроенные методы в класс Login :

public class Login {
    // ...
    
    void onValidateFromLogin() {
        if (email == null)
            System.out.println("Email is null);

        if (password == null)
            System.out.println("Password is null);
    }

    Object onSuccessFromLogin() {
        System.out.println("Welcome! Login Successful");
        return Home.class;
    }

    void onFailureFromLogin() {
        System.out.println("Please try again with correct credentials");
    }
}

9. Оповещения

Проверка формы является неполной без надлежащих предупреждений. Не говоря уже о том, что фреймворк также имеет встроенную поддержку предупреждающих сообщений.

Для этого мы сначала введем экземпляр Alert Manager в класс Login для управления оповещениями . Затем замените операторы println в существующих методах предупреждающими сообщениями:

public class Login {
    // ...
    @Inject
    private AlertManager alertManager;

    void onValidateFromLogin() {
        if(email == null || password == null) {
            alertManager.error("Email/Password is null");
            login.recordError("Validation failed"); //submission failure on the form
        }
    }
 
    Object onSuccessFromLogin() {
        alertManager.success("Welcome! Login Successful");
        return Home.class;
    }

    void onFailureFromLogin() {
        alertManager.error("Please try again with correct credentials");
    }
}

Давайте посмотрим на предупреждения в действии при сбое входа в систему:

10. Аякс

До сих пор мы изучали создание простой домашней страницы с формой. В то же время мы видели проверки и поддержку предупреждающих сообщений.

Далее давайте рассмотрим встроенную поддержку Apache Tapestry для Ajax.

Во-первых, мы введем экземпляр компонента AjaxResponseRenderer и Block в класс Home . Затем мы создадим метод on Call Ajax для обработки вызова Ajax:

public class Home {
    // ....

    @Inject
    private AjaxResponseRenderer ajaxResponseRenderer;
    
    @Inject
    private Block ajaxBlock;

    @Log
    void onCallAjax() {
        ajaxResponseRenderer.addRender("ajaxZone", ajaxBlock);
    }
}

Кроме того, нам нужно внести несколько изменений в наш Home.tml .

Во-первых, мы добавим ссылку событие для вызова метода on Call Ajax . Затем мы добавим элемент zone с идентификатором ajax Zone для отображения ответа Ajax.

Наконец, нам нужен компонент блока, который будет введен в класс Home и отображен в качестве ответа Ajax:

Call Ajax


Rendered through Ajax

The current time is: ${currentTime}

Давайте взглянем на обновленную страницу home :

Затем мы можем нажать кнопку Вызова Ajax и увидеть ajaxResponseRenderer в действии:

11. Ведение журнала

Чтобы включить встроенную функцию ведения журнала, необходимо ввести экземпляр Logger . Затем мы можем использовать его для ведения журнала на любом уровне, таком как ТРАССИРОВКА, ОТЛАДКА и ИНФОРМАЦИЯ.

Итак, давайте внесем необходимые изменения в класс Home :

public class Home {
    // ...

    @Inject
    private Logger logger;

    void onCallAjax() {
        logger.info("Ajax call");
        ajaxResponseRenderer.addRender("ajaxZone", ajaxBlock);
    }
}

Теперь, когда мы нажимаем кнопку Вызова Ajax, logger будет регистрироваться на уровне ИНФОРМАЦИИ:

[INFO] pages.Home Ajax call

12. Заключение

В этой статье мы изучили веб-фреймворк Apache Tapestry.

Для начала мы создали веб-приложение быстрого запуска и добавили Главная страница страница с использованием основных функций Apache Tapestry, таких как компоненты , страницы и шаблоны .

Затем мы рассмотрели несколько удобных аннотаций, предоставленных Apache Tapestry для настройки свойств и компонентов/страниц.

Наконец, мы изучили встроенную поддержку Ajax и ведения журнала, предоставляемую фреймворком.

Как обычно, все реализации кода доступны на GitHub .