JQuery JQGrid: как загрузить данные JSON из Spring MVC 3 @RequestBody - PullRequest
1 голос
/ 18 ноября 2010

Мне очень не хочется спрашивать об этом, потому что я думал, что это должно быть так же просто, как считать 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.

1 Ответ

2 голосов
/ 18 ноября 2010

Чтобы jqGrid мог принять этот JSON, вам нужно либо определить jsonreader ( детали здесь ), либо настроить вывод так, чтобы он соответствовал значениям по умолчанию, ожидаемым jqgrid. Если вы не структурировали его точно так, как ожидалось, jqGrid молча потерпит неудачу.

Чтобы это работало с jsonreader по умолчанию, вам нужно реструктурировать JSON, чтобы объект выглядел следующим образом:

{"page":1,"total":1,"records":1,"rows":[{"id":1,"cell":["johnsmith",1,"John","Smith",1]}]}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...