表单字段注入具有相同属性名称的多个bean

时间:2014-02-20 14:14:12

标签: java forms spring spring-mvc

所以问题应该非常简单。我有一个表单,GET和POST控制器方法和一个表单支持bean。

表格的相关部分:

<form:form modelAttribute="newUser" method="post" action="${signUpUrl}">
    <table>

        <tbody>
        <tr>
        <tr>
            <td>Username: </td>
            <td><c:out value="${userForEditBean.username}"/></td>
            <td></td>
        </tr>
        <tr>
            <td>Password</td>
            <td><form:password path="password" size="20"/>
            </td>
            <td><form:errors path="password" cssClass="error"/></td>
        </tr>
        <tr><input id="submitUser" name="Submit" value="Submit" type="submit" />  
        </tbody>
     </table>
</form:form>

GET方法

...
model.addAttribute("newUser", new SignUpBean());
model.addAttribute("test", new InjectTest());
...

POST方法

@RequestMapping(value = "/signup", method = RequestMethod.POST)
public String registerUser(@ModelAttribute("test") InjectTest injTest, @ModelAttribute("newUser") SignUpBean signUpBean, BindingResult bindingResult, Model model)
...

因此,当我单击提交我在POST方法中使用@ModelAttribute从模型中检索的所有bean时,它们具有String属性passwordsignUpBean和{{1}密码字段中有相同的内容,这是我在表单中输入的密码。

我不希望这样,我只想填充标有modelAttribute injTest的bean。

我正在使用Spring 3.2.6

1 个答案:

答案 0 :(得分:2)

将一个注释为InitBinder的方法添加到您的控制器,以防止密码绑定到InjectTest bean。

@InitBinder("test")
public void initBinder(WebDataBinder binder) {
    binder.setDisallowedFields("password");
}
相关问题