Мне очень не хочется спрашивать об этом, потому что я думал, что это должно быть так же просто, как считать 1-2-3. Я исследовал со вчерашнего дня и сегодня, но я не нашел решения.
Вот что я хочу сделать. Получите данные JSON с моих контроллеров Spring MVC 3 и отобразите эти данные на моем JQGrid.
Чтобы настроить мой контроллер для отправки данных JSON, я следовал совету из этой статьи Упрощение Ajax в Spring 3.0
Это отображение запроса, которое обрабатывает запрос JSON:
@RequestMapping(value = "/users", method = RequestMethod.GET)
public @ResponseBody List<UserDTO>viewUsersAsJSON(HttpServletRequest request, HttpServletResponse response, ModelMap model) {
logger.debug("Retrieving all users as JSON");
return userRoleService.getAll();
}
Это отображение работает, потому что я могу получить данные JSON из Firefox и RESTClient. Вот пример вывода данных JSON (мне пришлось удалить конфиденциальные данные):
[{"username":"johnsmith","userId":1,"firstName":"John","lastName":"Smith","id":"1"},{"username":"stackoverflow","userId":2,"firstName":"Stack","lastName":"Overflow","id":"2"}]
Мне не нужно было указывать заголовки Accept = application / json в Firefox или RESTClient для получения этих данных. Я просто набираю полный URL, например: http://localhost/myapp/users
Я не делал никаких специальных настроек или XML-настроек для моего сопоставления Spring MVC 3, потому что я ожидаю (основываясь на статье и полученных результатах), что это просто работает и дает мне JSON.
Вот мой JqGrid, как объявлено на моей странице JSP:
Javascript:
<script type="text/javascript">
jq(function() {
jq("#list2").jqGrid({
url:'/myapp/users',
datatype: 'json',
mtype: 'GET',
colNames:['Id','Username', 'User Id', 'First Name', 'Last Name'],
colModel:[
{name:'id',index:'id', width:55},
{name:'username',index:'username', width:90},
{name:'userId',index:'userId', width:90},
{name:'firstName',index:'firstName', width:100},
{name:'lastName',index:'lastName', width:80, align:"right"}
],
rowNum:10,
rowList:[10,20,30],
pager: '#pager2',
sortname: 'id',
viewrecords: true,
sortorder: "desc",
caption:"Users Table"
});
jq("#list2").jqGrid('navGrid','#pager2',{edit:false,add:false,del:false});
});
</script>
Вот мои CSS-элементы, объявленные в JSP:
<table id="list2"></table>
<div id="pager2"></div>
Я запустил консоль ошибок Firefox. Ошибок не найдено. Я запускал Firebug. Я также не видел никаких ошибок.
JqGrid загружается с правильными именами столбцов, но он пуст! Я установил другой JqGrid на другой странице JSP, используя простой массив данных, и он может загружать данные. Есть идеи или решения?
Действительно трудно найти какие-либо рабочие примеры интеграции JSON JqGrid в Spring MVC 3.