Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/spring-mvc/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java @ModelAttribute对象字段未返回到控制器_Java_Spring Mvc - Fatal编程技术网

Java @ModelAttribute对象字段未返回到控制器

Java @ModelAttribute对象字段未返回到控制器,java,spring-mvc,Java,Spring Mvc,我有一个非常简单的控制器,1)加载表单(视图)使用的对象,2)接受通过该表单提交的对该对象的更改。控制器(“PersonController”)如下所示: @RequestMapping(value="/accountsettings/{personid}") public String loadAccountSettings(@PathVariable("personid") int personid, ModelMap model)

我有一个非常简单的控制器,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";
}
public class Person {

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

    //getters and setters follow   

}
“Person”pojo如下所示:

@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";
}
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)时,所有字段都按预期填充(姓名、用户名和电话号码)。然而,当我去处理更新时,phone number字段被视为null,即使数据在表单中,并且(使用Firebug检查时),我看到值作为参数传递回来

有人知道为什么控制器会丢失此字段的(person.phoneNumber)值吗

提前谢谢


-e

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

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

你能用getter和setter显示Person类的代码吗?我同意@JapanTrivedi,这似乎是phoneNumber setter的问题。还有一件事:您可能想使用“modeldattribute”而不是“commandName”,根据@Dani是的,您是对的,表单标记中的commandName有一个问题。我没听懂。:)eugene请尝试将表单标记中的commandName更改为modelAttribute,因为在控制器中,您已将附加建议指定为@ModelAttributeThaks。我将在表单中创建commandName引用。