如何使用Spring MVC和注释删除记录

duk*_*ble 2 spring spring-mvc

我是Spring的新手,我正在努力完成以下任务:

假设我在数据库表中有一个包含2列"id"和"name"的水果列表.我想有一个显示列表的页面,每个水果旁边都有一个"删除"按钮.我认为这很容易实现,但我无法弄明白,也找不到任何解释这个的教程.

这就是我现在所拥有的:

视图:

<c:forEach items="${fruits}" var="fruit">
    <tr>
        <td><c:out value="${fruit.name}" /></td>
        <sec:authorize access="hasRole('admin')">
            <td>
                <a href="<c:url var="deleteUrl" value="/fruit/remove.html"/>">DELETE</a>
                <form id="${fruitFormId}" method="POST">
                    <input id="fruit" name="fruit" type="hidden" value="${fruit.id}"/>
                </form>
            </td>
        </sec:authorize>
    </tr>
</c:forEach>
Run Code Online (Sandbox Code Playgroud)

然后控制器:

@Controller
public class FruitController{

    @Autowired
    private FruitManager fruitManager;

    @RequestMapping(value = "/list", method = RequestMethod.GET)
    public String getFruits(ModelMap model) {
        model.addAttribute("fruits", this.fruitManager.getFruits());
        return "list";
    }

    @RequestMapping(value = "/fruit/remove", method = RequestMethod.POST)
    public String removeAd(Fruit fruit) {
        fruitManager.removeFruit(fruit);
        return "/list";
    }
Run Code Online (Sandbox Code Playgroud)

我甚至不确定我现在正在使用"良好和干净"的方式,并希望按照惯例(如果有的话)完成这种"正确的方式".

Ral*_*lph 7

你的代码是正确的,除了两个小问题: - 你不会重复fruit但是fruitId. - 您需要一个带有发送按钮而不是链接的HTML表单

所以你需要纠正你的控制器.

@RequestMapping(value = "/fruit/remove", method = RequestMethod.POST)
public String removeAd(@RequestParam("fruit") long fruitId) {
    Fruit fruit = fruitManager.loadById(fruitId);
    fruitManager.removeFruit(fruit);
    //or
    fruitManager.removeFruitById(fruitId);
    return "redirct:/list";
}
Run Code Online (Sandbox Code Playgroud)

然后我建议在POST后重定向(而不是直接返回列表页面),这样如果用户在删除水果后按下Browser refesh按钮就不会有问题.

对于HTML的东西,你不需要任何JQuery或JavaScript,除了你想要一些删除确认消息.

<c:url var="deleteUrl" value="/fruit/remove.html"/>    
<form id="${fruitFormId}" action="${deleteUrl}" method="POST">
      <input id="fruit" name="fruit" type="hidden" value="${fruit.id}"/>
      <input type="submit" value="delete" onClick="return confirm('sure?')"/>
</form>
Run Code Online (Sandbox Code Playgroud)