我正在使用Spring MVC框架和表单创建一个Web应用程序。
我在获取表单来更新PlayerModel中的字段position
时遇到麻烦。提交表单时,它只是不保存值(在commit()函数上检查控制器内联注释)。
如果我选择任一单选按钮(值分别为1
和2
)并提交,则模型将以值0
到达控制器。
尽管在StackOverflow上阅读了无数类似的问题/答案,但我无法使它正常工作。我在这里做错了什么?
[编辑]
我发现了问题所在。出于某种原因,单选输入中的name
属性值被用于与model属性匹配,而不是使用path
。
<input type="radio" id="index1" value="1" path="position" name="index" />
因此,它正在尝试将index
与模型(当然不存在)进行匹配,而不是在path属性中使用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;
}
}
答案 0 :(得分:1)
您正在使用Spring-MVC表单标签,因此请不要使用(For more details)这样的<input type="radio" id="index1" value="1" path="position" name="index" />
安装方式
<tr>
<td>Sex:</td>
<td>
Male: <form:radiobutton path="sex" value="M"/> <br/>
Female: <form:radiobutton path="sex" value="F"/>
</td>
</tr>
,HTML <input type="radio">
中没有 path 变量,
弹簧类型声明中应使用路径。
例如:
<form:input path="firstName"/>
的代码已由Spring更改为<input name="firstName" type="text"/>