2

我对 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";
    }

我什至不确定我现在是否正在使用“良好而干净”的方式,并且希望按照约定来完成这种“正确的方式”。

4

2 回答 2

8

你的代码是正确的,除了两个小问题: - 你不会收到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 之后重定向(而不是直接返回列表页面),因此如果用户在删除水果后按下浏览器刷新按钮,您将不会遇到问题。

对于 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>
于 2012-10-28T08:39:05.367 回答
0

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

于 2012-10-28T04:51:57.090 回答