2017-05-16 17 views
0

2つの送信ボタンを持つSpring 4 MVCフォームがあります。私は、これらのボタンが2つの異なるコントローラを指し示すようにしたい。問題は、1つのフォームに固定アクションパラメータが設定されていることです。 これは私のフォームです:2つのボタンを2つのコントローラに送信するスプリングフォーム

<form:form method="post" action="pageAction" commandName="id"> 
    <button type="submit" class="btn btn-primary" name="addBasket"> 
    Add Basket 
    </button> 
    <button type="submit" class="btn btn-danger" name="addProduct"> 
    Add Product 
    </button> 
</form:form> 

は、これらのボタンが2つの異なるコントローラに到達することは可能ですか?私はIDだけを送るつもりです、addBasketではbasketId、addProductではproductIdとなります。これらは、コントローラである:私はあなたが望む解決策があるかどうかわからない

@Controller 
public class BasketController { 

    @RequestMapping(value = "/addBasket", method = RequestMethod.POST) 
    public ModelAndView addBasket(@ModelAttribute("id") Integer id) { 
     //method - addBasket(id); 
    } 
} 

@Controller 
public class ProductController { 

    @RequestMapping(value = "/addProduct", method = RequestMethod.POST) 
    public ModelAndView addProduct(@ModelAttribute("id") Integer id) { 
     //method - addProduct(id); 
    } 
} 

答えて

0

あなたの要望。 w3schools

+0

これはまさに私が探していたものです。ご協力ありがとうございました。 – Frumbar

0

が、代案はnameの値をチェック/addItemifステートメントを使用するようになります。

@Controller 
public class ItemController { 

    @RequestMapping(value = "/addItem", method = RequestMethod.POST) 
    public ModelAndView addItem(@ModelAttribute("id") Integer id, @ModelAttribute("name") String name) { 
     if ("basket" == name) { 
      basketController.addBasket(id); 
     } else { 
      productController.addProduct(id); 
     } 
    } 
} 
+0

これはうまくいくが、これは私が探しているものではない。たぶん私はこの状況を避け、これらのボタンを別の形にするべきでしょうか?私のアプリケーションでは簡単ではありませんが、不可能ではありません:) – Frumbar

0

あなたを送信ボタンにonclickイベントを追加することができます。このボタンは、要件に従ってURLを決定/変更できるJavaScript関数を呼び出します。

<button type="submit" class="btn btn-primary" name="addBasket" onClick="javascript:addBasket()"> 

<button type="submit" class="btn btn-primary" name="addProduct" onclick="javascript:addProduct()"> 

のようなJavaScriptの任意の数の機能を追加します。あなたは、HTML 5と互換性のあるブラウザを使用している場合は、あなたがに応じてターゲットにするボタンの形やformaction属性を使用することができます

function addBasket() { 
var requestURL = '/addBasket'; 
var formData = $("#formName").serialize(); 

$.ajax({ 
    type: 'POST', 
    data: formData, 
    url: requestURL, 
    success: function (data1) { 
    //do what is required after success 
    }, 
    error: function (xhr) { 
     //in case of failure 
    } 
}); 

}

関連する問題