使用Spring和JSON进行Dojo Grid排序

car*_*ian 5 dojo spring json spring-mvc dojox.grid

所以我有一个使用Dojo和Spring的webapp.我在应用程序中有一些使用Json dojo存储加载的网格.事情似乎没问题,但我现在正在尝试实施排序.根据这个链接, dojo不会对Stores中的网格进行排序,而是将其留给服务器.好吧,我认为我可以使用它,但是我遇到了实际问题.

为了将数据导入我的网格,我让他们调用一个被我的控制器捕获的路径.例如,要加载我的作业网格,dojo会创建商店并调用/作业/数据.这是我的控制器代码:

@RequestMapping(value="/job/data", method=RequestMethod.GET,
        headers="Accept=application/json")
public @ResponseBody List<Job> getData() {
    return jobService.getAll();
}
Run Code Online (Sandbox Code Playgroud)

我正在使用Jackson Json处理器,因此这适用于返回Json格式化的数据.Dojo获取数据并显示它没有任何问题.当用户单击列标题进行排序时,Dojo会附加到调用的路径上,创建类似这样的内容(例如,在列programName上排序时):/ job/data?sort(+ programName)

我的问题是,虽然这段代码仍然调用上面的方法,但我不确定如何获得访问这个方法.我尝试使用@RequestParam参数,但这不起作用,实际上阻止了方法完全工作.这是我尝试过的:

@RequestMapping(value="/job/data", method=RequestMethod.GET,
        headers="Accept=application/json")
public @ResponseBody List<Job> getData(@RequestParam("sort") String sort) {
    log.info("Not getting here anymore");
}
Run Code Online (Sandbox Code Playgroud)

有人有主意吗?我想知道问题的一部分是否部分不符合正常的语法?sort = something.无论哪种方式,正如我所说,@RequestParam无论如何使用此方法添加无效.我的意思是,即使该方法仅被称为/ job/data而没有添加参数,我也会收到错误.如果你需要更多我的工作,请告诉我,因为这个问题是为了工作,我真的可以使用一些见解.谢谢.

UPDATE

经过大量的搜索,我找到了一个几乎解决这个问题的链接.但当然,Spring家伙自己遇到了我的问题而他的代码并没有修复它.他确实提到:

JsonStore以"sort(+ fieldName1,+ fieldName2,-fieldName3,...)"的形式发送其"sort"参数,因此整个事物成为参数键.这在Spring MVC中处理是不方便的,因为它需要下拉到HttpServletRequest并迭代通过参数键来找到以"sort"开头的那个,而不是能够使用@RequestParam处理程序参数注释.

那么有人可能会知道我会怎么做?

更新2

任何人?我只是想问一下是否有人可以指出我如何实施我已经找到的解决方案的正确方向.如何从spring控制器方法访问HttpServletRequest对象,以便我可以访问Dojo发送的搞乱的排序参数?

Pau*_*ner 1

如果您包含HttpServletRequest request到控制器方法中(它由 Spring MVC 自动注入),您可以通过以下方式访问不同的参数:

Set parameters = request.getParameterMap().keySet();
for(Object param : parameters){
  //Here you can process the params to retrieve the names and ordering direction
}
Run Code Online (Sandbox Code Playgroud)