2017-07-02 69 views
1

我是Spring MVC,Spring Data JPA和Java EE技術的新手。我有一個表格檢索數據,表格中有一個刪除文本。當用戶按下刪除時,我需要從數據庫中刪除它。這是我試過的。但我發現了從數據庫中刪除值 - Spring MVC,數據JPA

HTTP ERROR 404 Problem accessing /listProducts/delete/112. Reason: Not Found 

這是我的內部控制器

 @RequestMapping(value = "/listProducts/delete{productId}",method = RequestMethod.GET) 
public int delete(@PathVariable("productId") int productId){ 

    productService.delete(productId); 
    return "listProducts"; 
} 

在我的JSP方法。這是刪除文本

<td><a href="${pageContext.request.contextPath}/listProducts/delete/${product.productId }" 
       onclick="return confirm('Are you sure')">Delete</a> 
     </td> 

服務和服務實現類是正確的。請幫助解決這個問題

+4

您忘記了'delete'和'{productId}'之間的斜線。不要使用GET來刪除。使用DELETE(或至少,POST)。任何網絡爬蟲(如谷歌機器人)導航您的網頁將通過自動點擊鏈接刪除所有的值,鏈接之間應該用於導航,而不是刪除的東西。使用表單。投票結束打字錯誤。 –

+0

@JBNizet非常感謝。我對Spring很陌生。我需要使用表中的刪除鏈接來檢索這些數據。我已將其更改爲刪除。我沒有得到你的最後一部分。我怎樣才能改變這個以正確的方式? – venura

+0

除了鏈接,要刪除項目,請使用POST方法提交要刪除的同名ID(存儲爲表單中的隱藏字段)的表單。或者使用按鈕代替鏈接並使用JavaScript(AJAX)發送刪除請求以刪除該項目。如果您使用鏈接,網絡爬蟲將嘗試瀏覽所有鏈接,並因此刪除所有項目,因爲鏈接是爲了在頁面之間安全地導航而不是刪除項目。這就是網絡設計的方式,你最好尊重這個設計。 –

回答

1

變化

@RequestMapping(value = "/listProducts/delete{productId}",method = RequestMethod.GET) 

要(刪除/ {productId參數} - >刪除{productId參數}POST的代替GET

@RequestMapping(value = "/listProducts/delete/{productId}",method = RequestMethod.POST)