我对春季是相对较新的,我正在尝试完成以下操作:
假设我在数据库表中有一个带有2列" ID"one_answers"名称"的水果列表。我想为显示列表显示一个页面,并在每个水果旁边有一个"删除"按钮。我认为这很容易完成,但我无法弄清楚,找不到任何解释的教程。
这就是我现在拥有的:
查看:
<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";
}
我什至不确定我现在正在使用"良好和干净"的方式,并且想完成此"正确的方式",如果有的话,请按照约定。
您的代码正确,除了两个小问题: - 您不会回收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";
}
然后,我建议在发布后重定向(而不是直接返回列表页面),因此,如果用户删除水果后用户按下浏览器refersh按钮,您将不会遇到问题。
对于您不需要任何jQuery或JavaScript的HTML东西,除了您需要删除确认消息。
<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>
这很容易,好友。您只需将Ajax函数绑定到带有jQuery或其他内容的删除按钮上,但是首先我想确认您的项目可以在Tomcat中运行良好。我在您的代码中发现的一个问题是该方法去除(水果)。您可以通过HTTP通过对象水果,只需获得水果的ID即可。更改删除的方法(字符串ID)。在方法中,您可以使用reqest.getParameter()获取值。这是我建议的教程:http://www.ibm.com/developererworks/web/library/wa-spring3/index.html。