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

时间:2012-10-28 03:52:47

标签: 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>

然后是控制器:

@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";
    }

我甚至不确定我现在正在使用“干净利落”的方式,并希望按照惯例(如果有的话)完成“正确的方式”。

2 个答案:

答案 0 :(得分: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";
}

然后我建议在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>

答案 1 :(得分:0)

这很容易,伙计。您只需使用Jquery或其他东西将ajax函数绑定到删除按钮,但首先我要确认您的项目可以在tomcat中运行良好。我在你的代码中发现的一个问题是removeAd(Fruit fruit)方法。你可以用http传递一个对象Fruit,你可以得到果子的Id。将方法更改为removeAd(String id)。在方法中,您可以使用reqest.getParameter()来获取值。 这是我推荐的教程:http://www.ibm.com/developerworks/web/library/wa-spring3/index.html