【问题标题】:Spring MVC form radio input not updating modelSpring MVC 表单无线电输入未更新模型
【发布时间】:2019-04-06 13:25:36
【问题描述】:

我正在使用 Spring MVC 框架和表单创建一个 Web 应用程序。

我无法让我的表单更新我的 PlayerModel 中的字段 position。当我提交表单时,它根本不保存值(检查提交()函数上的控制器内联注释)。

如果我选择任一单选按钮(值为12)并提交,模型将到达值为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


【解决方案1】:

您正在使用 Spring-MVC 表单标签,因此请不要使用 &lt;input type="radio" id="index1" value="1" path="position" name="index" /&gt; 或像这样使用 (For more details)

<tr>
    <td>Sex:</td>
    <td>
        Male: <form:radiobutton path="sex" value="M"/> <br/>
        Female: <form:radiobutton path="sex" value="F"/>
    </td>
</tr>

并且 HTML &lt;input type="radio"&gt; 中没有 path 变量, 在 spring 类型声明中应使用路径。

例如: &lt;form:input path="firstName"/&gt;这个代码被Spring改成&lt;input name="firstName" type="text"/&gt;

【讨论】:

  • 确实是这个问题。在发布问题编辑后不久,我发现了这个愚蠢的错误。我打算发布我的遮阳篷,但你已经解释得很清楚了。谢谢
猜你喜欢
  • 2015-10-23
  • 1970-01-01
  • 1970-01-01
  • 2010-12-19
  • 2017-08-03
  • 2016-11-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多