Spring 无法从表单中获取字段

Spring 无法从表单中获取字段,spring,forms,spring-mvc,Spring,Forms,Spring Mvc,所以我对Spring Boot MVC和Thymeleaf是完全陌生的。这就是我想做的。用户填写并按下submit键的表单,提交后,Spring创建一个类型为Spitter的对象,并用用户在表单中键入的内容填充其字段。创建后,它应该查看结果页面,其中显示用户键入的内容。。。理论上很容易 这就是我目前的情况: 控制器: @Controller @RequestMapping("/spittles") public class SpittleController { Logger log = Lo

所以我对Spring Boot MVC和Thymeleaf是完全陌生的。这就是我想做的。用户填写并按下submit键的表单,提交后,Spring创建一个类型为
Spitter
的对象,并用用户在表单中键入的内容填充其字段。创建后,它应该查看结果页面,其中显示用户键入的内容。。。理论上很容易

这就是我目前的情况:

控制器:

@Controller
@RequestMapping("/spittles")
public class SpittleController {

Logger log = LoggerFactory.getLogger(this.getClass());

@RequestMapping(value = "/viewMock", method = RequestMethod.GET)
public String spittles(Model model) {
    Spitter spitterObj;
    model.addAttribute("spittle",
            spitterObj = new Spitter(22222, "MOCK", "MOCK"));
    SpitterContainer.containterContaingSpittles.add(spitterObj);
    return "spittles";
}

@RequestMapping(value = "/register", method = RequestMethod.GET)
public String register(Model model) {

    model.addAttribute("spitter", new Spitter());


    return "form";
}

@RequestMapping(value = "/register", method = RequestMethod.POST)
public String registerSubmit(@ModelAttribute Spitter spitter, Model model) {
    String info = String.format("Spitter Submission: id = %s, firstname = %s, lastname = %s",
            spitter.getID(), spitter.getUsername(), spitter.getPassword());
    log.info(info);
    model.addAttribute("spitter", spitter);
    SpitterContainer.containterContaingSpittles.add(new Spitter(44444, spitter.getUsername(), spitter.getPassword()));
    return "result";
}
}
吐痰类:

public class Spitter {

private int ID;
private String username;
private String password;


public Spitter(){};

public Spitter(int ID, String us, String pwd){
    setID(ID);
    setPassword(pwd);
    setUsername(us);
}

public String getID() {
    return Integer.toString(ID) ;
}

public void setID(int ID) {
    this.ID = ID;
}

public String getUsername() {
    return username;
}

public void setUsername(String username) {
    this.username = username;
}

public String getPassword() {
    return password;
}

public void setPassword(String password) {
    this.password = password;
}

public List<String> getSpittles() {
    return spittles;
}

public void setSpittles(List<String> spittles) {
    this.spittles = spittles;
}

private List<String> spittles;
public-class-Spitter{
私有int-ID;
私有字符串用户名;
私有字符串密码;
公共随地吐痰者({};
公共随地吐痰器(int-ID、String-us、String-pwd){
setID(ID);
设置密码(pwd);
setUsername(美国);
}
公共字符串getID(){
返回整数.toString(ID);
}
公共无效集合ID(内部ID){
this.ID=ID;
}
公共字符串getUsername(){
返回用户名;
}
public void setUsername(字符串用户名){
this.username=用户名;
}
公共字符串getPassword(){
返回密码;
}
public void setPassword(字符串密码){
this.password=密码;
}
公共列表getSpitles(){
回吐唾沫;
}
公共垃圾坑(列表垃圾坑){
这个。唾沫=唾沫;
}
私人名单随地吐痰;
}

表单视图:

    <!DOCTYPE HTML>
<html xmlns:th="http://www.thymeleaf.org">
<head>
    <title>REGISTRATION FORM</title>
</head>
    <body>
    <h1>Form</h1>
    <form action="#" th:object="${spitter}" method="post">
        <p>username: <input type="text" th:field="*{username}" /></p>
        <p>password: <input type="text" th:field="*{password}"/></p>
        <p><input type="submit" value="Submit" /> <input type="reset" value="Reset" /></p>
    </form>

</body>

登记表
形式
用户名:

密码:

结果视图:

    <!DOCTYPE HTML>
<html xmlns:th="http://www.thymeleaf.org">
<head>
    <title>Form Submission</title>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
</head>
<body>
<h1>Result</h1>
<p th:text="'id: ' + ${spitter.getID}" />
<p th:text="'First Name: ' + ${spitter.getUsername}" />
<p th:text="'Password Name: ' + ${spitter.getPassword}" />
<a href="/form">Submit another Customer Form</a>
</body>
</html>

提交表格
结果

我知道这是写得很糟糕的代码,但我想让这个简单的东西工作。日志输出写入详细信息(忽略ID号,但我知道原因),但我得到以下错误:
org.springframework.expression.spel.SpelEvaluationException:EL1008E:在类型为“hello.data.Spitter”的对象上找不到属性或字段“getID”-可能不是公共的?


有什么想法吗?

更改结果视图:

<!DOCTYPE HTML>
<html xmlns:th="http://www.thymeleaf.org">
<head>
    <title>Form Submission</title>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
</head>
<body>
<h1>Result</h1>
<p th:text="'id: ' + ${spitter.ID}" />
<p th:text="'First Name: ' + ${spitter.username}" />
<p th:text="'Password Name: ' + ${spitter.password}" />
<a href="/form">Submit another Customer Form</a>
</body>
</html>

提交表格
结果


您应该使用字段名,而不是getter方法。

spitter.ID
spitter.ID
代替
spitter.getID
怎么样?