@ModelAttribute对象字段未返回到Controller

时间:2012-05-15 00:37:34

标签: java spring-mvc

我有一个非常简单的控制器,1)加载一个表单(视图)使用的对象,2)接受通过该表单提交的对象的更改。控制器(“PersonController”)如下所示:

@RequestMapping(value="/accountsettings/{personid}")
public String loadAccountSettings(@PathVariable("personid") int personid,
                              ModelMap model){
    Person person = personService.find(personid);
    model.addAttribute("person",person);
    return "account-settings-form";
}

@RequestMapping(value="/saveaccountsettings")
public String saveSettings(@ModelAttribute("person") Person person){
    personService.update(person);
    return "account-settings-form";
}

“Person”pojo看起来像这样:

public class Person {

    private id int;
    private String name;
    private String username;
    private String phoneNumber;

    //getters and setters follow   

}

我的表单(account-settings-form.jsp)具有以下内容:

<form:form commandName="person" action="/saveaccountsettings">
   <form:input path="name" /><br />
   <form:input path="username" /><br />
   <form:input path="phoneNumber" /><br />
   <input type="submit" />
</form:form>

我遇到的问题是,当表单加载数据(loadAccountSettings)时,所有字段都按预期填充(名称,用户名和电话号码)。但是,当我去处理更新时,电话号码字段被视为空,即使数据在表单中并且(在使用Firebug检查时),我看到值作为参数传回。

有谁知道为什么控制器会丢失这个字段的(person.phoneNumber)值?

提前致谢。

-e

1 个答案:

答案 0 :(得分:0)

我想出了问题,我在上面的描述中遗漏了控制器的一部分,忘记了我几个月前添加的 - 一个InitBinder方法。最近添加了电话号码字段,但未添加到@ InitBinder的allowedFields数组中:

@InitBinder
public void initBinder(WebDataBinder binder){
    binder.setAllowedFields(new String[]{
        "name", "username", "phoneNumber"
    });
}