Многие виджеты JavaScript ожидают данные и параметры в формате JSON. В настоящее время действительно легко выбрать классный виджет и обернуть его в составной компонент. Но первый вопрос — как отправить запрос AJAX и получить ответ в правильном формате JSON. Этот вопрос часто задают пользователи JSF. Все, что вам нужно, это XHTML-фейслет, как этот:
|
1
2
3
4
5
6
|
<f:view encoding="UTF-8" contentType="text/html" <h:outputText value="#{stationView.getClosestStations(param.longitude, param.latitude)}" escape="false"/></f:view> |
Пожалуйста, рассмотрите contentType = ”text / html” (application / json здесь не будет работать) и escape = ”false” в h: outputText. Метод getClosestStations () в компоненте StationView создает вывод JSON для списка специальных объектов Java. Я советую использовать библиотеку Gson для сериализации любого объекта Java в JSON. Краткий пример:
|
1
2
3
|
String[] strings = {"abc", "def", "ghi"};Gson gson = new Gson();gson.toJson(strings); ==> prints ["abc", "def", "ghi"] |
Файл XHTML выше расположен в веб-контексте. Скажем, по пути /rest/stations.xhtml. Вызов Ajax в вашем коде JavaScript должен выглядеть следующим образом:
|
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
|
$.ajax({ url: requestContextPath + '/rest/stations.xhtml', type: "GET", data: { "longitude": x, "latitude": y }, dataType: "json", success: function (data) { $.each(data, function (i, station) { ... }); }, error: function () { ... }}); |
Пожалуйста, обратитесь к документации jQuery для получения дополнительной информации о $ .ajax. Примечание: если вы опустите dataType: «json», вам придется анализировать строку JSON вручную.
|
1
2
3
4
5
|
success: function (data) { $.each($.parseJSON(data), function (i, station) { ... });} |
Ответ представляет собой чистую строку JSON (без тегов HTML), подобную этой:
|
1
|
[{"latitude":46.947045,"longitude":7.443922,"distanz":110,"name":"Bern, Bundesplatz"},{....},...] |
Нужно больше примеров для ответа JSON в JSF? В одной из моих следующих публикаций я, вероятно, объясню, как реализовать классный компонент автозаполнения без написания слишком большого количества кода.
| Ссылка: | Как получить ответ JSON от JSF? от нашего партнера JCG Олега Вараксина в блоге « Мысли о разработке программного обеспечения» . |