Перейти к основному содержимому

Введение в платформу калитки

· 4 мин. чтения

1. Обзор

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

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

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

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

2. Настройка

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

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

Возможно, вы захотите проверить последнюю версию Wicket в репозитории Maven Central , которая на момент вашего чтения может не совпадать с используемой здесь.

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

3. Калитка HelloWorld

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

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

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

Wicket предпочитает соглашение, а не конфигурацию. Для добавления новой веб-страницы в приложение необходимо создать два файла: файл 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.foreach.wicket.examples.HelloWorldApplication
</param-value>
</init-param>
</filter>

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

Запустите проект , создав военный файл ( пакет mvn из командной строки) и разверните его в контейнере сервлетов, таком как 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);
}
});

Создание аналогично лейблу, конструктор принимает id калитки, модель и список названий кафе.

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

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

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

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

5. Вывод

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

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

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