Basic Spring MVC数据绑定

我正在学习Spring MVC,我到处寻找一个基本的控制器来查看数据绑定,但我没有尝试过任何工作。 我可以将视图发布回控制器,我可以在那里看到带有属性的pojo,但每当我尝试将该对象添加到模型时,我什么也得不到。 这是我到目前为止:

调节器

@Controller public class HomeController { @RequestMapping(value = "/", method = RequestMethod.GET) public String home(Model model) { model.addAttribute(new Person()); return "home"; } @RequestMapping(value="/about", method=RequestMethod.POST) public void about(Person person, Model model) { model.addAttribute("person", person); } } 

我要绑定的类

 public class Person { private String _firstName; private String _lastName; private Date _Birthday; //Set public void setFirstName(String FirstName){this._firstName = FirstName; } public void setLastName(String LastName){this._lastName= LastName; } public void setBirthDate(Date BirthDate){ this._Birthday = BirthDate;} //get public String getFirstName(){return _firstName;} public String getLastName(){return _lastName;} public Date getBirthDate(){return _Birthday;} } 

查看 – 控制器到表单! 加工

     FirstName: ${model.person.getFirstName} LastName: ${model.person.getLastName}   

我可以或需要做什么才能让它绑定?

模型属性是您在这里缺少的东西。

 @Controller public class HomeController { @ModelAttribute("person") public Person getPerson(){ return new Person(); } @RequestMapping(value = "/", method = RequestMethod.GET) public String home() { return "home"; } @RequestMapping(value="/about", method=RequestMethod.POST) public void about(@ModelAttribute("person") Person person, BindingResult result, Model model) { if( ! result.hasErrors() ){ // note I haven't compiled this code :) } } } 

我们的想法是在GET和POST上都会调用@ModelAttribute方法,在GET请求中它只会暴露给视图,而在POST上它将用于绑定请求参数。

请注意, BindingResult将传递给POST方法,以便您可以使用该命令执行某些操作。

1)modelMap的内容隐含在JSP中。 访问它们时,无需指定“模型”。

2)JSP-EL通过bean属性访问器访问字段,而不是调用方法。 您没有指定’get’来调用实际方法。 您使用bean属性名称。 例如,$ {person.firstName}来获取person.getFirstName()的结果;

 @RequestMapping(value = "/", method = RequestMethod.GET) public String home(Model model) { Person person = new Person(); person.setFirstName("Kai"); person.setLastName("Cooper"); model.addAttribute("person", person); return "home"; } 

`

     FirstName: ${person.firstName} LastName: ${person.lastName}   

您还需要更改Person对象,之前属性不应该有“_”。 将“_firsName”更改为“firstName”。 吸气剂,二传手都很好。 Spring绑定通过属性名称传递给相应的getter和setter。

还可以更改视图中的访问方式。 像$ {person.firstName}一样使用。 你不需要“person.firstName”之前的“模型”,也不需要提及getFirstName,spring会自动为你做这件事。

请检查您的Person类变量,getter和setter方法命名。 Getter方法应以’get’和变量名的第一个大写字母开头,其他字母的大小写相同,例如: getFirstName()和setter方法也应该像getter方法一样。 如果getter和setter方法的命名约定不同,则绑定无法正常工作。 这是Person类的更新版本。

 public class Person { private String firstName; private String lastName; private Date Birthday; //Set public void setFirstName(String FirstName){this.firstName = FirstName; } public void setLastName(String LastName){this.lastName= LastName; } public void setBirthDate(Date BirthDate){ this.Birthday = BirthDate;} //get public String getFirstName(){return firstName;} public String getLastName(){return lastName;} public Date getBirthDate(){return Birthday;} }