我对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";
}
我甚至不确定我现在正在使用“干净利落”的方式,并希望按照惯例(如果有的话)完成“正确的方式”。
答案 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。