2012-05-12 89 views
5

我一直在使用Spring MVC的AJAX有問題。我有一個有很多字段的表單,每個字段都會根據點擊的關聯按鈕來檢索數據。Ajax請求 - 調用彈簧控制器上的不同方法

因此,我的每個按鈕都需要調用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請求具有不同的功能?

回答

8

首先,考慮當您從服務器檢索數據而未修改該服務器的狀態時,通常接受的標準是使用HTTP GET方法,而不是POST。因此,對於前兩種方法,您濫用HTTP方法。

其次,您可以使用RequestMapping註釋的value屬性將單個URL模式映射到特定的方法。

三,代表您的賬戶信息資源的最大程度的休息方式是使用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是建立像一棵樹,其中路徑的前兩個部分是再次「帳戶」和ACCOUNTID:

// 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 documentation on Spring MVC

+2

哇!我非常感謝這個答案!這非常有幫助!上帝保佑你的善良!再次感謝!!! –

+0

我很高興能夠提供幫助。祝你好運! :) – jmort253