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 , чтобы дать вам представление о том, как выглядит разработка с использованием этого фреймворка.