Это руководство по использованию Wicket с URL-адресами в стиле REST. Обычно Wicket генерирует URL-адреса, которые немного уродливы.
Например: http://www.example.com/wui/?wicket:bookmarkablePage=%3Anl.stuq.demo.SomePage .
Уч!
URL-адреса RESTful меняют это: они более значимы для пользователя, скрывают некоторые детали вашей реализации и просто красивы. Кроме того, вы присоединяетесь к одному из последних шумих. Жизнь не может быть лучше …
Оглядываясь на промежутки , можно найти немного полезной информации об использовании RESTful URL в Wicket. Поскольку это нужно для проекта, над которым я сейчас работаю, я решил превратить это в небольшой учебник.
Что такое ОТДЫХ?
Представительная передача состояния (REST) — это программный архитектурный стиль для распределенных гипермедиа систем, таких как всемирная паутина. Лучший способ объяснить это — пример. Приложение REST может определять следующие ресурсы:
- http://example.com/users/
- http://example.com/users/ndomuser} (по одному для каждого пользователя)
- http://example.com/findUserForm
- http://example.com/locations/
- http://example.com/locations/ averagelocation} (по одному для каждого местоположения)
- http://example.com/findLocationForm
Это очень, очень краткое объяснение лишь небольшой части того, что делает REST. Больше информации, как всегда, можно найти в Википедии .
Когда вы используете пользовательские URL-адреса, вы фактически скрываете часть своей внутренней структуры за более значимыми URL-адресами. Это означает, что вы можете легче выполнять рефакторинг, не нарушая внешние ссылки или закладки на определенную часть вашего сайта. Это также важно для поисковой оптимизации.
Примечание: я не буду описывать здесь, когда вы должны или не должны использовать REST с Wicket. Это архитектурная дискуссия, которая сильно зависит от вашего проекта. Я обнаружил некоторые ограничения в модели разработки Wicket, которые мешают полной реализации REST. Пожалуйста, прочитайте дальше для получения дополнительной информации.
Первые шаги
Я предлагаю вам сначала скачать код и читать дальше до конца этого поста.
Мы собираемся создать страницу обзора клиентов и страницу обзора продуктов, доступную по адресам «http://example.com/customers/» и «http://example.com/products/».
HomePage имеет две ссылки, на список клиентов и список продуктов. Списки продуктов и клиентов содержат ссылки на каждый отдельный продукт (http://example.com/products/$‹ID}) и на клиента (http://example.com/customers/$ndomID}).
Для пользовательского интерфейса Wicket я создал HomePage, который ссылается на CustomerOverviewPage и ProductOverviewPage, которые ссылаются на страницы сведений о клиенте и продукте. Для обработки данных у нас есть несколько простых сервисов, ProductService и CustomerService.
[img_assist | nid = 3736 | title = | desc = | link = none | align = left | width = 501 | height = 135] Код
У Wicket есть хороший встроенный метод объявления (монтирования) пользовательских схем URL. Просто предоставьте класс, который реализует интерфейс IRequestTargetUrlCodingStrategy для веб-приложения.
public final void mount(IRequestTargetUrlCodingStrategy encoder)
Относительно новым в Wicket является MixedParamUrlCodingStrategy , который мы будем использовать через минуту.
Это пример того, как использовать MixedParamUrlCodingStrategy в вашем классе WebApplication:
public WicketApplication()
{
MixedParamUrlCodingStrategy productURLS = new MixedParamUrlCodingStrategy("products",ProductDetailPage.class, new String[]{"id"}
);
mount(productURLS);
Это означает:
"products"
Это часть URL-адреса после URL-адреса приложения Wicket. В данном случае: «http://www.example.com/ products »ProductDetailPage.class
Это определяет, для какого класса предназначен этот URL. В нашем проекте ProductDetailPage показывает детали продукта.new String[]{"id"}
Это список всех параметров, которые вы хотите передать на эту страницу. Это проявляется в URL-адресе, например: «http://www.example.com/products/ 23 » для продукта с идентификатором 23. Вы можете легко передать дополнительные параметры этой странице, добавив элементы в этот массив строк.mount(productURLS);
Это передает этот MixedParamUrlCodingStrategy в веб-приложение.
Страница сведений о продукте
ProductDetailPage получает эти параметры URL следующим образом:
public ProductDetailPage(PageParameters parameters) {
int id = parameters.getInt("id");
После этого вы можете получить Продукт с этим идентификатором (остальную часть кода можно скачать ниже):
setModel(new CompoundPropertyModel(productService.getProduct(id)));
add(new Label("id"));
add(new Label("name"));
add(new BookmarkablePageLink("backLink", getApplication().getHomePage()));
Ограничения калитки
В настоящее время невозможно (без обходного решения вне Wicket) выполнять HTTP PUT, DELETE и POST для произвольных URL-адресов. Если вы знаете, как этого добиться, вы можете опубликовать это в комментариях.
Дальнейшие шаги
В приведенном выше руководстве мы настраивали URL-адреса в методе init () WebApplication. Это имеет тот недостаток, что информация об одной странице находится в нескольких местах. С точки зрения архитектуры полезно настраивать URL-адреса с самой страницы. Посмотрите на проект аннотации wicket-stuff для получения дополнительной информации о том, как это сделать. Вы можете найти отличный учебник там. Библиотека wicketstuff-annotation используется для декларативного монтирования ваших страниц с помощью аннотаций Java.
дальнейшее чтение
- Помещение большего количества переменных в URL, устойчивое к AJAX: HybridUrlCodingStrategy
- Список рассылки Wicket: Могу ли я получить «Хороший URL», если проверка формы не удалась?
Скачать
Загрузите полный пример проекта и начните экспериментировать! (запустить с помощью mvn jetty: запустить и подключиться к http: // localhost: 8080 / demo)
Дайте мне знать, как и где вы используете это в комментариях!