如果我将对象传递给jsp页面,如何使用setter更新其字段并将其发回?
例如我们有
public class Person {
private int age;
private String name;
public int getAge() {
return age;
}
public String getName() {
return name;
}
public void setAge(int age) {
this.age = age;
}
public void setName(String name) {
this.name = name;
}
}
和控制器
@RequestMapping(value = "/updatePerson", method = RequestMethod.GET)
public String showPerson(Model model) {
Person person = new Person();
person.setAge(23);
person.setName("Jack");
model.addAttribute("person", person);
return "updatePerson";
}
和jsp页面
<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form"%>
<form:form modelAttribute="person">
<form:input path="age"/>
<input type="submit"/>
</form:form>
如何使这个JSP页面作为结果发送修改后的人物对象,而不是仅包含一个字段的新文件?
答案 0 :(得分:2)
在控制器中添加一个处理表单提交的方法:
@RequestMapping(value = "/updatePerson", method = RequestMethod.POST)
public String alterPerson(@ModelAttribute Person person) {
// do stuff
}
请注意更改:
POST
代替GET
:默认情况下提交表单使用POST
- 请求。@ModelAttribute
会自动检索提交的数据,并用它填充Person
个对象但是,使用表单,name
字段将始终为空。添加另一个<form:input path="name"/>
来修复它。
如果您不想让用户更改其名称,则Person
对象可能根本不应出现在您的模型中;但这取决于这些对象如何持久化。您可以使用这样的单独对象:
public class PersonChangeRequest {
private int age;
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
并将其用作@ModelAttribute
,如下所示:
@RequestMapping(value = "/updatePerson", method = RequestMethod.GET)
public String showPerson(Model model) {
PersonChangeRequest person = new PersonChangeRequest();
person.setAge(23);
model.addAttribute("person", person);
return "updatePerson";
}
@RequestMapping(value = "/updatePerson", method = RequestMethod.POST)
public String alterPerson(@ModelAttribute PersonChangeRequest personChangeRequest) {
Person person = findPersonToChange(personChangeRequest);
person.setAge(personChangeRequest.getAge());
}