我有一个使用Dojo和Spring的Web应用程序。应用程序中有一些使用Json dojo存储加载的网格。事情似乎还好,但现在我正在尝试实现排序。根据this link,dojo不会对商店中的网格进行排序,而是将其留给服务器处理。好吧,我认为我可以处理它,但是我遇到了实际操作时的问题。
为了将数据放入我的网格中,我让它们调用一个路径,该路径由我的控制器捕获。例如,要加载我的Job网格,dojo创建存储并调用/job/data。这是我控制器代码:
我正在使用Jackson Json处理器,这对于返回Json格式的数据非常有效。Dojo获取数据并且没有任何问题地显示它。当用户单击列标题以进行排序时,Dojo会附加到所调用的路径上,创建类似于这样的内容(例如在程序名称列上进行排序时):/job/data?sort(+programName) 我的问题是,虽然此代码仍调用上述方法,但我不知道如何访问这个附加部分。我尝试使用@RequestParam参数,但那并不起作用,实际上会完全阻止该方法的工作。这是我尝试过的内容:
为了将数据放入我的网格中,我让它们调用一个路径,该路径由我的控制器捕获。例如,要加载我的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发送的排序参数?