Статьи

Wicket Создание RESTful URL

Это руководство по использованию 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.

дальнейшее чтение

Скачать

Загрузите полный пример проекта и начните экспериментировать! (запустить с помощью mvn jetty: запустить и подключиться к http: // localhost: 8080 / demo)

Дайте мне знать, как и где вы используете это в комментариях!