我一直在使用AJAX与Spring MVC的有关问题。 我里面有很多字段的形式,每场根据相关的按钮被点击检索数据。
所以,我的按钮,每一个都需要调用一个AJAX请求。 每个反应将在相关联的场被显示。
我不知道是否有可能调用不同的方法在我的春节,控制器一旦我点击不同的按钮?
换句话说,我想使多个Ajax请求到同一控制器,每个请求将调用在同一个控制器不同的方法。
见下面的例子:
// when get account detail is clicked it will call this method
@RequestMapping(method=RequestMethod.POST)
public @ResponseBody String getAccountDetails(@RequestParam(value="accountid") String accountid){
return somefunct.getAccountDetails(accountid);
}
// when get account summary is clicked it will call this method
@RequestMapping(method=RequestMethod.POST)
public @ResponseBody String getAccountSummary(@RequestParam(value="accountid") String accountid){
return somefunct.getAccountSummary(accountid);
}
/* when submit button is clicked... Form is submitted for saving*/
@RequestMapping(method=RequestMethod.POST)
public String submitForm(){
// save here
return "myform";
};*/
目前,我只能有一个Ajax请求。 我怎么能修改此代码,这样我可以有不同的AJAX请求不同的功能?
首先,考虑当你没有修改服务器的状态,从服务器获取数据,普遍接受的标准是使用HTTP GET方法,无法发布。 因此,对于你的前两种方法,你滥用HTTP方法。
其次,你可以单独的URL模式来使用RequestMapping注解的value属性的具体方法映射。
第三,代表您的账户信息资源的最大程度的休息方式是使用PathVariable注释,包括在实际的路径你的身份ACCOUNTID:
@RequestMapping(value="/account/{accountid}/details", method = RequestMethod.GET)
public @ResponseBody String getAccountDetails(@PathVariable(value="accountid") String accountid){
return somefunct.getAccountDetails(accountid);
}
接下来,你可以使用其中的URL是建立像一棵树,其中路径的前两个部分是再次“帐户”和ACCOUNTID不同的URL模式代表您的帐户摘要:
// when get account summary is clicked it will call this method
@RequestMapping(value="/account/{accountid}/summary", method=RequestMethod.GET)
public @ResponseBody String getAccountSummary(@PathVariable(value="accountid") String accountid){
return somefunct.getAccountSummary(accountid);
}
现在,你的提交方法,而另一方面,有副作用。 这是说,你的服务器的状态将在此请求结束不同的只是一种奇特的方式,任何获取对资源提出的要求会有所不同之前的变化比他们。 适当的HTTP方法修改资源或将资源添加到集合是HTTP POST方法时使用。 当更换一个集合中,HTTP PUT方法是首选的普遍接受的方法。
PUT和POST之间的另一个区别因素是,PUT是幂等,这意味着相同的请求重复了一遍又一遍不改变服务器上的状态。 如果打相同的请求多次创造更多的记录,然后使用POST。
最后,该请求可以被映射到一个URL为好。 在下面的例子中,我假设你正在创建一个新的账户记录,并在数据库帐户的集合中插入新记录。 因此,我用POST。 我还修改了参数列表使用PathVariable采取从URL路径ACCOUNTID,我加了注释RequestBody,这样就可以在请求中,这可能反序列化到Java对象的身体发送对象:
/* when submit button is clicked... Form is submitted for saving*/
@RequestMapping(value="/account/{accountid}", method=RequestMethod.POST)
public String submitForm(@PathVariable String accountid, @RequestBody Account account){
// save here
return "myform";
}
有关Spring MVC的更多信息,请查看关于Spring MVC的Spring文档 。