org.springframework.expression.spel.SpelEvaluationException:EL1007E:属性或字段' xxxxx'无法在null上找到

时间:2017-09-05 18:03:59

标签: java spring spring-boot

我试图编写一个简单的控制器,将POST数据从HTML表单传送到某个REST端点。

这是我的控制器的样子:

package com.integration.common.controller;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.PostMapping;


@Controller
public class WebController {

@GetMapping("/form")
public String form(Model model){
    model.addAttribute("fieldProps",new FieldProperties());
    return "Form";
    }
@PostMapping("/form")
public String submit(@ModelAttribute FieldProperties fieldProps){
    return "Result";
    }
}

我的模特:

package com.integration.common.controller;

public class FieldProperties {
    private String owner;
    private String storyName;


    public String getOwner() {
        return owner;
    }

    public String getStoryName() {
        return storyName;
    }

    public void setOwner(String owner) {
        this.owner = owner;
    }

    public void setStoryName(String storyName) {
        this.storyName = storyName;
    }
}

最后,我的表格:

<form action="#" th:action="@{/form}" th:object="${fieldProps}" method="post" >
    <div class="form-group">
        <label for="owner">Owner</label>
        <input type="text" id="owner" th:field="*{owner}" class="form-control"/>
    </div>
    <div class="form-group">
        <label for="storyName">Name of Story</label>
        <input type="text" id="storyName" th:field="*{storyName}" class="form-control"/>
    </div>
    <input type="submit" value="Submit" />
</form>

我理解流程是如何工作的,但由于某些原因,我仍然得到这个例外。我是否需要以某种方式将@Autowired标志合并到我的代码中?我非常关注本教程:https://spring.io/guides/gs/handling-form-submission/

1 个答案:

答案 0 :(得分:0)

将模型属性从一个视图传递到另一个视图有两种方法。

一个。您的FieldProperties类变量名称应与“fieldProperties”而不是“fieldProps”相同,并更改html以引用“fieldProperties”。

@Controller
public class WebController {

    @GetMapping("/form")
    public String form(Model model) {
        model.addAttribute("fieldProperties", new FieldProperties());
        return "Form";
    }

    @PostMapping("/form")
    public String submit(@ModelAttribute FieldProperties fieldProperties) {

        return "resultForm";
    }
}

湾如果您不想通过更改变量更改所有位置的代码,请将post方法更改为下方,在方法中再添加一个参数Model model,并再次将fieldProps添加为模型中的属性

@PostMapping("/form")
    public String submit(@ModelAttribute FieldProperties fieldProps, Model model) {
        model.addAttribute("fieldProps", fieldProps);
        return "resultForm";
    }