Melewati data objek dari JSP ke Metode Posting Pengontrol Spring alih-alih metode GET

Saya baru mengenal Spring Web MVC dan mengembangkan aplikasi web. Ada kasus di mana saya perlu meneruskan nilai data ke Pengendali. (Catatan: Di sini nilai data adalah nilai objek kacang)

Item Number  Item Name  Description  Price

 Item1018     Item1      Desc1        5.0      Add item to Cart  
 Item1019     Item2      Desc2        2.0      Add item to Cart  

Seperti yang ditunjukkan pada gambar di atas, jika saya mengklik "Tambahkan item ke Keranjang" nomor item masing-masing harus diteruskan ke pengontrol.

tampilanmenu.jsp

<c:forEach items="${model.itemlists}" var="item">
<tr>
   <c:if test = "${item.status == 'available'}">   
    <td><c:out value="${item.itemNo}"/>  </td>
    <td><c:out value="${item.itemName}"/></td>
    <td><c:out value="${item.description}"/></td>
    <td><c:out value="${item.price}"/></td>
    <td><a href="/id<c:url value="additemtocart">
             <c:param name='itemNumber' value="${item.itemNo}"/>
         </c:url>">Add item to Cart</a> </td>
    </c:if>
</tr>
</c:forEach>

Metode CustomerController.java

@RequestMapping(value = "additemtocart",method = RequestMethod.GET)
     public ModelAndView addItemToCart(@RequestParam("itemNumber") String itemno  ) throws ClassNotFoundException, SQLException {
                   System.out.println("Username test in customer controller: "+userName);

 }

Kode berfungsi dan saya dapat meneruskan nilainya. Namun sesuai standar metode GET dan POST (dijelaskan di sini ), menurutku aku melakukan kesalahan. Tolong sarankan apakah ada cara lain untuk meneruskan data ke metode POST. Tolong sarankan saya. Terima kasih sebelumnya

(Ini pertama kalinya saya posting di sini, maaf jika ada kesalahan)


person swagath001    schedule 19.11.2014    source sumber


Jawaban (3)


Masukkan semuanya ke dalam formulir (menggunakan tag <form:form> Spring). Ini akan POST formulir ke URL yang sama dengan yang ditampilkan. Jika Anda ingin POST ke URL lain, atur atribut action pada formulir.

Ubah tautan Add item to Cart Anda menjadi tombol kirim, karena Anda tidak boleh mengubah data dengan GET. Anda dapat menatanya sesuai keinginan dan membuatnya terlihat seperti tautan jika Anda mau.

Tombol Anda akan terlihat seperti ini:

<button type=submit name=itemNumber value=xxx>Add item to Cart</button>

Di pengontrol Anda, Anda harus memiliki metode penangan dengan pemetaan permintaan seperti ini:

@RequestMapping(value="additemtocart", method=RequestMethod.POST, params={"itemNumber"})

Anda kemudian harus menggunakan pola Post-Redirect-Get untuk mengarahkan kembali ke daftar produk. Lihat flashAttributes dalam dokumentasi Spring MVC.

person Neil McGuigan    schedule 19.11.2014
comment
Apakah Anda ingin saya mengubah seluruh tautan menjadi tombol? Dan bagaimana metode handler dengan nilai additemtocart akan dipanggil dengan mengklik tombol kirim. bisakah kamu menentukan yang itu juga? - person swagath001; 19.11.2014
comment
Mengedit jawaban saya. Pastikan semuanya berjalan dalam bentuk. Ini akan membuat permintaan POST ke server pada URL yang sama dengan halaman yang ditampilkan. Anda dapat mengubah atribut action formulir untuk URL lain. - person Neil McGuigan; 19.11.2014

Ya, Anda benar, Anda harus menggunakan permintaan POST untuk melakukan segala jenis operasi DML di server. GET harus digunakan untuk operasi pengambilan data saja. Alasannya adalah untuk menghindari pengiriman formulir ganda yang dapat Anda lakukan dengan F5 atau klik dua kali tombol kirim. Anda harus menggunakan metode=RequestMethod.POST daripada GET. Lihat Permintaan Posting MVC Musim Semi

person M Sach    schedule 19.11.2014

Anda telah menambahkan ke tombol troli sehingga dengan mengkliknya Anda dapat melakukan panggilan Ajax dan menggunakan pemetaan permintaan yang sesuai di pengontrol.

<a href="/idjavascript:addItemToCart(${item.itemNo},"passURL");">Add to cart item?</a>

Dalam Javascript, Anda dapat meneruskan parameter dan memberikan tipe sebagai POST untuk permintaan ajax.

Kode JavaScript

function addItemToCard(itemNo,targetURL){

  $.ajax(function(){
    url:targetURL,
    type:"POST",
    data:"itemNumber":itemNo,
    success:function(response){
       alert("Added successfully");
    }
  });

}
person Shoaib Chikate    schedule 19.11.2014