Многие виджеты 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 Олега Вараксина в блоге « Мысли о разработке программного обеспечения» . |