Введение в Wicket Framework

1. Обзор

Wicket - это ориентированная на веб-компонент Java среда, ориентированная на веб-компоненты на стороне сервера, которая призвана упростить создание веб-интерфейсов путем внедрения шаблонов, известных в разработке пользовательского интерфейса для настольных компьютеров.

С Wicket можно создать веб-приложение, используя только код Java и HTML-страницы, совместимые с XHTML. Нет необходимости ни в JavaScript, ни в файлах конфигурации XML.

Он обеспечивает уровень в цикле запрос-ответ, предотвращая работу на низком уровне и позволяя разработчикам сосредоточиться на бизнес-логике.

В этой статье мы познакомим вас с основами создания приложения __HelloWorld W __icket, а затем приведем полный пример с использованием двух встроенных компонентов, взаимодействующих друг с другом.

2. Настроить

Чтобы запустить проект Wicket, добавим следующие зависимости:

<dependency>
    <groupId>org.apache.wicket</groupId>
    <artifactId>wicket-core</artifactId>
    <version>7.4.0</version>
</dependency>

Вы можете проверить последнюю версию Wicket в https://search.maven.org/classic/#search%7Cgav%7C1%7Cg%3A%22org.apache.wicket%22%20AND%20a%3A% 22wicket% 22[репозиторий Maven Central], который на момент прочтения может не совпадать с тем, который используется здесь.

Теперь мы готовы построить наше первое приложение Wicket.

3. HelloWorld Калитка

Давайте начнем с создания подкласса класса WebApplication Wicket, который, как минимум, требует переопределения Class <? расширяет метод Page> getHomePage () .

Wicket будет использовать этот класс в качестве основной точки входа приложения. Внутри метода просто верните объект class класса с именем HelloWorld:

public class HelloWorldApplication extends WebApplication {
    @Override
    public Class<? extends Page> getHomePage() {
        return HelloWorld.class;
    }
}

Калитка одобряет соглашение по конфигурации. Добавление новой веб-страницы в приложение требует создания двух файлов: файла Java и файла HTML с одинаковым именем (но с разным расширением) в одном каталоге. Дополнительная конфигурация необходима, только если вы хотите изменить поведение по умолчанию.

В каталоге пакета исходного кода сначала добавьте HelloWorld.java :

public class HelloWorld extends WebPage {
    public HelloWorld() {
        add(new Label("hello", "Hello World!"));
    }
}

затем HelloWorld.html :

<html>
    <body>
        <span wicket:id="hello"></span>
    </body>
</html>

В качестве последнего шага добавьте определение фильтра внутри web.xml:

<filter>
    <filter-name>wicket.examples</filter-name>
    <filter-class>
      org.apache.wicket.protocol.http.WicketFilter
    </filter-class>
    <init-param>
        <param-name>applicationClassName</param-name>
        <param-value>
          com.baeldung.wicket.examples.HelloWorldApplication
        </param-value>
    </init-param>
</filter>

Это оно. Мы только что написали наше первое веб-приложение Wicket.

Запустите проект, создав файл war ( mvn package из командной строки) и разверните его в контейнере сервлетов, таком как Jetty или Tomcat.

Давайте откроем http://localhost : 8080/HelloWorld/в браузере. Должна появиться пустая страница с сообщением Hello World! .

4. Компоненты калитки

Компоненты в Wicket - это триады, состоящие из класса Java, разметки HTML и модели. Модели - это фасад, который компоненты используют для доступа к данным.

Эта структура обеспечивает хорошее разделение задач и, отделяя компонент от операций, ориентированных на данные, увеличивает повторное использование кода.

  • В следующем примере ** показано, как добавить поведение Ajax к компоненту. Он состоит из страницы с двумя элементами: выпадающим меню и меткой. При изменении выпадающего списка метка (и только метка) будет обновлена.

Тело HTML-файла CafeSelector.html будет минимальным, только с двумя элементами, выпадающим меню и меткой:

<select wicket:id="cafes"></select>
<p>
    Address: <span wicket:id="address">address</span>
</p>

На стороне Java давайте создадим метку:

Label addressLabel = new Label("address",
  new PropertyModel<String>(this.address, "address"));
addressLabel.setOutputMarkupId(true);

Первый аргумент в конструкторе Label соответствует wicket: id , назначенному в файле HTML. Второй аргумент - это модель компонента, оболочка для базовых данных, представленных в компоненте.

Метод setOutputMarkupId делает компонент пригодным для модификации через Ajax. Давайте теперь создадим выпадающий список и добавим к нему поведение Ajax:

DropDownChoice<String> cafeDropdown
  = new DropDownChoice<>(
    "cafes",
    new PropertyModel<String>(this, "selectedCafe"),
    cafeNames);
cafeDropdown.add(new AjaxFormComponentUpdatingBehavior("onchange") {
    @Override
    protected void onUpdate(AjaxRequestTarget target) {
        String name = (String) cafeDropdown.getDefaultModel().getObject();
        address.setAddress(cafeNamesAndAddresses.get(name).getAddress());
        target.add(addressLabel);
    }
});

Создание похоже на ярлык, конструктор принимает идентификатор калитки, модель и список названий кафе.

Затем добавляется AjaxFormComponentUpdatingBehavior с помощью метода обратного вызова onUpdate , который обновляет модель метки после выполнения запроса ajax. Наконец, компонент метки устанавливается в качестве цели для обновления.

Наконец, компонент метки устанавливается в качестве цели для обновления.

Как вы можете видеть, все является Java, ни одна строка Javascript не была необходима. Чтобы изменить то, что отображается на этикетке, мы просто изменили POJO. Механизм, посредством которого изменение объекта Java преобразуется в изменение веб-страницы, происходит за кулисами и не имеет отношения к разработчику.

Wicket предлагает большой набор компонентов с поддержкой AJAX. Каталог компонентов с живыми примерами доступен here

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

В этой вводной статье мы рассмотрели основы Wicket - компонентную веб-инфраструктуру на Java.

Wicket предоставляет уровень абстракции, который призван покончить с каналом.

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