[英]Update object using JSP form
如果我將一個對象傳遞給 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 頁面作為結果發送修改過的 person 對象,而不是只有一個字段的新對象?
在控制器中添加一個處理表單提交的方法:
@RequestMapping(value = "/updatePerson", method = RequestMethod.POST)
public String alterPerson(@ModelAttribute Person person) {
// do stuff
}
注意變化:
POST
而不是GET
:默認情況下提交表單使用POST
-Requests。@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());
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.