Spring MVC форма радиовхода не обновляет модель - PullRequest
0 голосов
/ 06 апреля 2019

Я создаю веб-приложение с использованием среды и форм 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;
    }
}

1 Ответ

1 голос
/ 07 апреля 2019

Вы используете тег формы Spring-MVC, поэтому, пожалуйста, не используйте этот <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"/> этот код изменен на <input name="firstName" type="text"/> на пружину

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...