簡體   English   中英

Basic Spring MVC數據綁定

[英]Basic Spring MVC Data Binding

我正在學習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;}
}

查看 - 控制器到表單! 工作

<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
<html>
</head>
    <body>
        FirstName: ${model.person.getFirstName}
        LastName: ${model.person.getLastName}
    </body>
</html>

我可以或需要做什么才能讓它綁定?

模型屬性是您在這里缺少的東西。

@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";
}

`

<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
<html>
</head>
    <body>
        FirstName: ${person.firstName}
        LastName: ${person.lastName}
    </body>
</html>

您還需要更改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;}
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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