使用Spring和JSON使Dojo Grid排序


问题内容

所以我有一个使用Dojo和Spring的webapp。我在应用程序中有一些使用Json
dojo商店加载的网格。事情似乎还不错,但是我现在正在尝试实现排序。根据此链接,
dojo不会对Stores中的网格进行排序,而是将其交给服务器。好的,我想我可以解决这个问题,但是我在实际操作中遇到了问题。

为了使数据进入网格,我让它们调用一个路径,该路径被控制器捕获。例如,要加载我的Job网格,dojo将创建商店并调用/ job /
data。这是我的控制器代码:

@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 ,我也会收到一个错误。如果您还有其他需要解决的问题,请与我联系,因为这个问题是在工作中,我真的可以利用一些见解。谢谢。

更新

经过大量搜索后,我确实找到了一个链接,几乎可以解决此问题。但是,当然,Spring员工本人会遇到我的问题,并且他的代码无法解决问题。他确实提到:

JsonStore以“ sort(+ fieldName1,+ fieldName2,-fieldName3,…)”的形式发送其“
sort”参数,因此整个东西成为参数键。在Spring
MVC中,这不方便处理,因为它需要下拉至HttpServletRequest并遍历参数键以找到以“
sort”开头的键,而不是能够使用@RequestParam处理程序参数注释。

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

更新2

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


问题答案:

如果您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
}