Spring mvc Spring表单隐藏值在提交时丢失

Spring mvc Spring表单隐藏值在提交时丢失,spring-mvc,jstl,modelattribute,Spring Mvc,Jstl,Modelattribute,在我的“更新用户”页面上,我有一个隐藏字段,用于保存正在编辑的当前用户的ID。我已经检查了HTML源代码,并且正确填充了值。但是,当我提交表单时,userID值始终为0,而其他字段都正确 -我已尝试将类型设置为表单:输入并提交,但在控制器端仍然为0。 -没有bindingresult错误。 -页面URL:/admin/update user.html?uid=3(我已尝试将URL变量从uid更改为userID,没有区别。) 那到底是怎么回事?!我是不是错过了一些明显的东西 JSTL <fo

在我的“更新用户”页面上,我有一个隐藏字段,用于保存正在编辑的当前用户的ID。我已经检查了HTML源代码,并且正确填充了值。但是,当我提交表单时,userID值始终为0,而其他字段都正确

-我已尝试将类型设置为表单:输入并提交,但在控制器端仍然为0。
-没有bindingresult错误。
-页面URL:/admin/update user.html?uid=3(我已尝试将URL变量从uid更改为userID,没有区别。)

那到底是怎么回事?!我是不是错过了一些明显的东西

JSTL

<form:form commandName="user" method="POST">
<form:hidden path="userID"/>
<table width="400" cellpadding="3" cellspacing="0" border="0" class="datatable">
    <tr>
        <td>User ID #</td>
        <td>${user.userID}</td>
    </tr>
    <tr>
        <td valign="top">Password</td>
        <td>****<br /><a href="change-password.html?uid=${user.userID}">Change Password</a></td>
    </tr>
    <tr>
        <td>First Name</td>
        <td><form:input path="firstName" /></td>
    </tr>
    <tr>
        <td>Last Name</td>
        <td><form:input path="lastName" /></td>
    </tr>
    <tr>
        <td>Gender: </td>
        <td>
            <form:select path="gender">
                <form:option value="Male" label="Male" />
                <form:option value="Female" label="Female" />
            </form:select>
        </td>
    </tr>
    <tr>
        <td>Birthday: </td>
        <td><form:input path="birthday" id="datepickerpast" readonly="true" /></td>
    </tr>
    <tr>
        <td>Email</td>
        <td><form:input path="email" /></td>
    </tr>
    <tr>
        <td>&nbsp;</td>
        <td><input type="submit" value="Update" /> <input type="reset"></td>
    </tr>
</table>
</form:form>
具有适当getter/setter的对象属性

private int userID;
private String firstName;
private String lastName;
private String username;
private String email;
private Date birthday;
private String gender;

实现了我的getter是Integer类型,但我的setter和属性是int类型。将它们都设置为Integer,这样就可以工作了。如果有人能解释为什么编译时没有错误,或者为什么它没有按原来的方式工作,那将不胜感激


唉,我的生命已经过去了3个小时。

因为,你得到了一个编译器错误,这允许原语自动转换为它们的包装类替代品。至于getter使用Integer时它为什么不起作用,我无法帮助您。

如果在控制器方法的第一行中断,您是否看到用户对象已填充?在那一点上它有用户ID吗?我在控制器方法的第一行为每个属性做了一个System.out.println,用户ID为0,其他所有内容都有正确的值。在方法调用中使用“@RequestParam(“userID”)int userID”,我可以得到正确的值。所以在表单提交时,userID没有正确绑定。
private int userID;
private String firstName;
private String lastName;
private String username;
private String email;
private Date birthday;
private String gender;