5

我在将 AJAX 与 Spring MVC 一起使用时遇到了问题。我有一个包含很多字段的表单,每个字段根据单击的关联按钮检索数据。

所以,我的每个按钮都需要调用一个 AJAX 请求。每个响应都将显示在相关字段上。

我想知道一旦我点击了不同的按钮,是否可以在我的 Spring 控制器中调用不同的方法?

换句话说,我想向同一个控制器发出多个 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 请求提供不同的功能?

4

1 回答 1

8

首先,考虑当您从服务器检索数据而不修改该服务器的状态时,普遍接受的标准是使用 HTTP GET 方法,而不是 POST。因此,对于您的前两种方法,您误用了 HTTP 方法。

其次,您可以使用 RequestMapping 注释的 value 属性将单个 URL 模式映射到特定方法。

第三,表示您的帐户详细信息资源的最 RESTful 方式是使用 PathVariable 注释并将您的标识 accountid 包含在实际路径中:

@RequestMapping(value="/account/{accountid}/details", method = RequestMethod.GET)
public @ResponseBody String getAccountDetails(@PathVariable(value="accountid") String accountid){  

 return somefunct.getAccountDetails(accountid);  

}  

接下来,您可以使用不同的 URL 模式表示您的帐户摘要,其中 URL 像树一样构建,其中路径的前两部分再次是“帐户”和帐户 ID:

// 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);  

}  

现在,另一方面,您的提交方法有副作用。这只是一种奇特的说法,即您的服务器状态在此请求结束时会有所不同,并且对该资源发出的任何 GET 请求都将与更改之前不同。修改资源或将资源添加到集合时使用的适当 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 文档

于 2012-05-12T05:15:19.863 回答