使用Spring和JSON使Dojo Grid排序

5
我有一个使用Dojo和Spring的Web应用程序。应用程序中有一些使用Json dojo存储加载的网格。事情似乎还好,但现在我正在尝试实现排序。根据this link,dojo不会对商店中的网格进行排序,而是将其留给服务器处理。好吧,我认为我可以处理它,但是我遇到了实际操作时的问题。
为了将数据放入我的网格中,我让它们调用一个路径,该路径由我的控制器捕获。例如,要加载我的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会附加到所调用的路径上,创建类似于这样的内容(例如在程序名称列上进行排序时):/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”的正常语法。无论如何,正如我所说,即使没有添加任何参数调用该方法,使用/job/data也不起作用。如果您需要更多信息,请告诉我,因为这个问题是为工作而存在的,我真的需要一些见解。谢谢。

更新

在大量搜索之后,我发现了a link,几乎解决了这个问题。但是当然,Spring的专家本人也遇到了我的问题,他的代码无法解决它。他提到:

JsonStore以"sort(+fieldName1,+fieldName2,-fieldName3,...)"的形式发送其“sort”参数,因此整个内容成为参数键。这在Spring MVC中很麻烦,因为它需要转换为HttpServletRequest并迭代参数键以查找以“sort”开头的键,而无法使用@RequestParam处理程序参数注释。

我应该如何实现这个功能?有人可以知道吗?

更新2

有人能指导我如何实现已经找到的解决方案吗?我如何从Spring控制器方法中访问HttpServletRequest对象,以便我可以访问Dojo发送的排序参数?


你看过文档 http://static.springsource.org/spring/docs/current/spring-framework-reference/html/mvc.html 中的第15.3.2.12章节(自定义WebDataBinder初始化)了吗?虽然我没有尝试过,但这可能是一个不错的起点。 - Philippe
不,我认为那与我的问题没有任何关系。我可能错了,但我不这么认为。我正在询问如何实现Spring开发人员本人提到的解决方案,这与WebDataBinders无关。 - cardician
1个回答

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
}

1
非常感谢!现在看到您的答案后,我意识到我本应该能够想出来的,特别是因为我开始将HttpServletResponse注入到另一个方法中。不过没关系,我很感激您抽出时间来回答我的问题。 - cardician

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接