2012-05-12 15 views
5

Spring MVCでAJAXを使用する際に問題が発生しました。私は多くのフィールドを持つフォームを持ち、各フィールドは、クリックされた関連するボタンに応じてデータを取得します。Ajaxリクエスト - Springのコントローラで別のメソッドを呼び出す

私のボタンのそれぞれは、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

まず、サーバーの状態を変更せずにサーバーからデータを取得する場合、一般的に受け入れられている標準は、POSTではなくHTTP GETメソッドを使用することです。したがって、最初の2つの方法では、HTTPメソッドを悪用しています。

第2に、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); 

} 

次は、別のを使用してアカウントの概要を表すことができます

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

} 

さて、あなたはこの方法を提出し、一方で、副作用があります。URLはパスの最初の2つの部分が再び「アカウント」ですツリー、およびアカウントIDのように構築されたURLパターン。これは、このリクエストの最後にサーバーの状態が異なり、そのリソースに対して行われたGETリクエストが、変更前のものとは異なることを示すための素晴らしい方法です。リソースを変更したり、リソースをコレクションに追加するときに使用する適切なHTTPメソッドは、HTTP POSTメソッドです。コレクションを置き換えるときは、HTTP Method PUTが一般的に受け入れられている選択方法です。

PUTとPOSTの間のもう1つの差異要因は、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

wow!私はその答えにとても感謝しています!それはとても役に立ちました!神はあなたの優しさを祝福します!再度、感謝します!!! –

+0

私はお手伝いできることをうれしく思っています。がんばろう! :) – jmort253

関連する問題