Я создаю веб-приложение с использованием среды и форм Spring MVC.
У меня проблемы с получением формы для обновления поля position
в моей PlayerModel.Он просто не сохраняет значение при отправке формы ( проверьте встроенный комментарий контроллера к функции submit () ).
Если я выберу любую радио-кнопку (со значениями 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;
}
}