使用Spring和JSON进行Dojo Grid排序

时间:2011-12-09 16:50:03

标签: json spring spring-mvc dojo dojox.grid

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

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

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

我正在使用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");
}

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

更新

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

  

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

那么有人会知道我会怎么做吗?

更新2

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

1 个答案:

答案 0 :(得分: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
}