簡體   English   中英

使用 JSP 形式更新對象

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM