【发布时间】:2019-04-06 13:25:36
【问题描述】:
我正在使用 Spring MVC 框架和表单创建一个 Web 应用程序。
我无法让我的表单更新我的 PlayerModel 中的字段 position。当我提交表单时,它根本不保存值(检查提交()函数上的控制器内联注释)。
如果我选择任一单选按钮(值为1 和2)并提交,模型将到达值为0 的控制器。
尽管在 StackOverflow 上阅读了无数类似的问题/答案,但我无法让它发挥作用。我在这里做错了什么?
[编辑]
我发现了问题所在。出于某种原因,无线电输入中name 属性的值被用于与模型属性匹配,而不是使用path。
<input type="radio" id="index1" value="1" path="position" name="index" />
所以它试图将index 与当然不存在的模型匹配,而不是在路径属性中使用position 值。
不应该反过来吗?
playerView.jsp
<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%>
<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form"%>
<html>
<head>
</head>
<body>
<form:form action="/game/playerView" method="POST" modelAttribute="playerModel">
<table>
<tr>
<th>
<input type="radio" id="index1" value="1" path="position" name="index" />
<input type="radio" id="index2" value="2" path="position" name="index"/>
</th>
</tr>
<tr>
<td><input type="submit" value="Submit"/></td>
</tr>
</table>
</form:form>
</body>
</html>
GameController.java
@Controller
@SessionAttributes("playerModel")
public class GameController {
@RequestMapping(value = "playerView", method = RequestMethod.GET)
public ModelAndView hello(ModelMap map) {
PlayerModel playerModel = new PlayerModel();
playerModel.setPosition(0);
map.addAttribute("playerModel", playerModel);
return new ModelAndView("playerView", "playerModel", playerModel);
}
@RequestMapping(value = "playerView", method = RequestMethod.POST)
public ModelAndView submit(@ModelAttribute("playerModel") PlayerModel playerModel, BindingResult result, ModelMap model){
playerModel.getPosition(); // returns 0
model.addAttribute("playerModel", playerModel);
return new ModelAndView("playerView", "playerModel", playerModel);
}
}
PlayerModel.java
@Resource
public class PlayerModel {
private int position;
public int getPosition() {
return position;
}
public void setPosition(int position) {
this.position = position;
}
}
【问题讨论】:
-
由于某种原因,无线电输入中的“名称”属性的值被传递给模型而不是“路径”属性。不应该反过来吗?
标签: java spring-mvc jsp