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

时间:2013-03-04 20:44:49

标签: spring-mvc jstl modelattribute

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

- 我尝试将类型设置为表单:输入并提交,在控制器端仍为0 - 没有任何约束错误 -Page 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>

控制器

@RequestMapping(value = "admin/update-user", method = RequestMethod.POST)
public String processUpdateUser(ModelMap model, @ModelAttribute("user") User user, BindingResult result) throws SQLException {
    if (result.hasErrors()) {
        model.addAttribute("user", user);
        model.addAttribute("pagetitle", "Admin - Update User Details");
        return "admin/users/update-user";
    } else {
        userDao.updateUser(user);
        return "redirect:/admin/user-management.html";
    }
}

具有适当getter / setter的对象属性

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

2 个答案:

答案 0 :(得分:0)

已实现我的getter是Integer类型,但我的setter和属性是int类型。使所有这些整数和它工作。如果有人可以解释为什么编译时没有错误或为什么它不能按原样运行,那将非常感激。

叹息,我的生命还有3个小时。

答案 1 :(得分:0)

由于autoboxing,您遇到了编译器错误,它允许将基元自动转换为其包装类替代品。至于为什么当getter使用Integer时它不起作用,我无法帮助你。