2017-08-16 16 views
2

私はSpring Bootを使用していますが、理解していない点があります。 コントローラーのメソッドで作成されたmodelが、@ResponseBodyアノテーションで注釈されているとします。 jsファイルに2つのグローバル変数を設定するために使用する2つの変数、Stringとintをこのモデルの中に入れなければなりません。この設定はajax関数が成功した場合に行われます。Spring Model属性を使用してjs変数を設定する

したがって、私のグローバル変数はglobal1global2であると仮定しましょう。モデルの中に入れる変数はString aint bです。このシナリオでは、何が起こったしなければならないことは次のとおりです。

$.ajax({ 
     ...<url, method and other actions here>... 
     success: function(){ 
       global1 = String a; 
       global2 = int b; 
     } 

私の疑問は、3とおりです。

  1. 私は、モデル内の変数String aint bを置いてもよい方法は? model.addObject()を使用するか、Modelmapオブジェクトを作成するのが良いでしょうか、abと入力してモデルに入れてください。この2つのアプローチの間にはどのような違いがありますか?

  2. 私がsuccess: function()を持っているとき、どのパラメータを入力する必要がありますか?function()

  3. 成功関数の中で、モデルデータを使ってグローバル変数を設定する方法はありますか?これを実行するためにどのような構文を使用できますか?言い換えれば、私のモデルがあるとき、変数にアクセスしてglobal1 = String aglobal2 = int bを実行するにはどうすればいいですか?

答えて

1

あなたはModelオブジェクトを使用して、AJAX成功機能を持っている必要があるすべてのオブジェクトに対してaddAttributeメソッドを使用することができます。あなたがModelオブジェクトを追加することができ、すべての春の方法では、例えば:

@RequestMapping(value="value", method = RequestMethod.POST) 
    public @ResponseBody String yourMethod(@RequestParam(value="yourParam") String yourParam, 
         Model model){ 
    String a = "Your String"; 
    int b = 456; 

    model.addAttribute("myString", a); 
    model.addAttribute("myInt", b); 

    return ""; 
} 

成功機能は応答である1つのパラメータを宣言する必要があります。

success: function(response){ 
      // response.myString will be "Your String" 
      // response.myInt will be 456 
     } 
+1

これは完全に機能します。ありがとう、編集のためにも! –

1

一般::クリーンな方法は、しかし、それはparam1=param1value&param2=param2value を行い、@ModelAttribute className classNameを使用して取り戻すAJAXのデータで$("form").serialize();を使用することです。このパラメータの中に、あなたはモデルオブジェクト(myStringmyInt)で追加のパラメータがあります編集ではcheckBoxや日付、ラジオボタンの自動値検出などの問題が多いかもしれませんので、Springフォームのバックエンドを使用し、バックエンドオブジェクトを渡してAjaxをドロップすることをお勧めします。また、@ResponseBodyを使用すると、クライアント側でjsonオブジェクトを作成し、そのようなサーバに入る必要があります。@RequestBody className className、そして私は開発のためにクライアントサイドで時間がかかると思っています。Ajaxでは特にクライアントサイドの方が時間がかかりますjQuery AJAXの代わりにthymleafフラグメントのロードを使用するには、このメソッドでThymleafオブジェクトのバックコマンド地形を使用することもできます。 しかし、ご質問1-場合は、JSONの利用@RequestBodyを送信すると、このようなモデルを得る:

@RequestMapping(value = "/", method = RequestMethod.POST) 
public ResponseEntity<Car> update(@RequestBody Car car) { 
    ... 
} 

@ResponseBodyあなただけのオブジェクトを送り返す必要がありますので、ちょうどしかし、あなたは、Ajaxのメソッドの状態を返送することができ、ジャクソン自動バッキングオブジェクトをサポート

return new ResponseEntity<Car>(car, HttpStatus.OK); 

または

return new ResponseEntity("done", HttpStatus.OK); 

2-I:レスポンスエンティティを使用すると、それは、HTMLのデータとステータスがintにようになっているラッパーですF 200 201を得ますjqueryの行わ機能を使用して、その他の成功は 値およびdoneあなたは一般的な戻ってくるデータで

.done(function(data) { 
    alert("$.get succeeded"); }); 

、3-してデータを取得することができacitvatedあなたはforeachの必要があるJSONのリストがあるとJSONなどの各項目を取得しますオブジェクトなどをポイントで開くitem.prop

+0

良いと完全な応答;ありがとう! –

関連する問題