Wicket и богатый ajax-сайт: самый простой способ сделать это? - PullRequest
2 голосов
/ 17 мая 2010

Я хочу использовать Wicket для создания приложения, но у меня есть несколько дизайнеров, которые хотели бы написать / поддерживать javascript, и они в основном ожидают 1 JS-сегмент на страницу и глобальный JS-файл. Я думаю, что наиболее естественный способ добавить javascript в wicket - это добавить его для каждого компонента (не для каждой страницы), что создаст проблемы для этих дизайнеров (фракционированный javascript и необходимость его записи в java-файлах). Есть ли лучший способ решить эту проблему? (конечно, я ожидаю, что все будет работать после частичного обновления.)

И вторая (связанная) вещь, которую они хотели бы (и я бы хотел на самом деле), это возможность запрашивать информацию в формате JSON через статическую ссылку, возможно ли это в Wicket?

Ответы [ 4 ]

3 голосов
/ 02 июня 2010

Я начал с JSON, заставив мои страницы калитки возвращать JSON, но быстро понял, что есть лучшие инструменты для работы, особенно если у вас будет полный слой веб-сервисов. Если вам просто нужно немного JSON здесь и там, всегда через GET, тогда, конечно, просто создайте страницу Wicket.

В итоге я использовал Джерси с Джексоном рядом с Wicket. Jersey упрощает настройку URL-адресов, которые могут выполнять разные действия с различными методами http (GET / POST / PUT / DELETE), а также легко анализировать строки запросов и т. Д. Я бы посоветовал пойти по этому пути для более тяжелых нужд JSON.

Вы можете легко запустить Wicket и Jersey в одном веб-приложении с небольшой конфигурацией web.xml.

1 голос
/ 08 июня 2010

Вы можете легко использовать следующий код для динамического общения с Wicket:

AbstractDefaultAjaxBehavior callme = new AbstractDefaultAjaxBehavior(){
        @Override
        protected void respond(AjaxRequestTarget target) {
        }
};
page.add(callme);


//From any ajaxrequesttarget you can simply append the following code:
target.appendJavascript("wicketAjaxGet('"+callme.getCallbackUrl()+");");

Таким образом, у вас может быть ссылка ajaxlink и т. Д., Которая будет передавать запрос ajaxrequ на сторону калитки. Если вы хотите передать данные (хотя статическая ссылка не звучит так), сделайте следующее:

"wicketAjaxGet('"+callme.getCallbackUrl()+"&x='+value_to_pass_back''";
//to Read the value in the respond:
String x = RequestCycle.get().getRequest().getParameter("x");

Таким образом, URL-адрес для обратного вызова генерируется динамически (так как URL-адрес обратного вызова специфичен для сеанса), но он формируется как любой другой URL-адрес ....

Для меня это в 10 раз проще, чем строить систему JSON поверх калитки вместо того, чтобы использовать встроенную в нее .... Я использую это все время, и она прекрасно работает для меня, по крайней мере. Если ваше решение отличается / лучше, я хотел бы знать, почему, возможно.

1 голос
/ 17 мая 2010

Встроенная поддержка Wicket AJAX всегда отслеживает состояние и, следовательно, доступ к ним осуществляется с помощью смены URL. Если ваши дизайнеры не планируют использовать библиотеку Wicket JS, довольно просто смонтировать JSON-страницу:

public class JsonReturningPage extends WebPage {
  public JsonReturningPage(PageParameters params) {
    String json = "{foo: 4711}";
    IRequestTarget t = new StringRequestTarget("application/json", "UTF-8", json);
    getRequestCycle().setRequestTarget(t);
  }
}

В качестве альтернативы, вы также можете реализовать свой собственный AbstractRequestTargetUrlCodingStrategy, чтобы напрямую возвращать IRequestTarget из IRequestTarget decode(RequestParameters params) и монтировать его в своем приложении.

Что касается файлов JS, я бы попытался научить их использовать один файл на компонент. Это, безусловно, имеет преимущество, заключающееся в меньшем количестве кода для копирования и вставки и более простом обслуживании. Кроме того, я бы определенно препятствовал JS в коде Java. Обычно требуется только передать данные или конфигурацию в JS, либо как определения переменных, либо как вызовы методов. Поскольку эти данные обычно находятся на Java, а JS пишутся дизайнерами, настало время для дизайнеров и программистов объединиться.

1 голос
/ 17 мая 2010

Быстрый ответ на ваш второй вопрос: да, это возможно. Используйте закладки для доступа к ресурсу, который возвращает данные JSON.

...