我是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)
我甚至不确定我现在正在使用"良好和干净"的方式,并希望按照惯例(如果有的话)完成这种"正确的方式".
你的代码是正确的,除了两个小问题: - 你不会重复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)
| 归档时间: |
|
| 查看次数: |
12985 次 |
| 最近记录: |