spring 形式的欢迎页面

Welcome page in spring form

为什么我们在使用 Spring Form 时在 Controller class 的 showForm() 方法中返回 ModelAndView。

@Controller
public class EmployeeController {

    @RequestMapping(value = "/employee", method = RequestMethod.GET)
    public ModelAndView showForm() {
        return new ModelAndView("employeeHome", "employee", new Employee());
    }

    @RequestMapping(value = "/addEmployee", method = RequestMethod.POST)
    public String submit(@Valid @ModelAttribute("employee")Employee employee, 
      BindingResult result, ModelMap model) {
        if (result.hasErrors()) {
            return "error";
        }
        model.addAttribute("name", employee.getName());
        model.addAttribute("contactNumber", employee.getContactNumber());
        model.addAttribute("id", employee.getId());
        return "employeeView";
    }
}

如果您 return 来自控制器方法的字符串,其值将被视为您要向用户显示的视图的名称。在呈现视图时,数据取自 Model 或 ModelMap 实例,您将其作为参数传递给方法并在方法主体中填充数据。

    model.addAttribute("name", employee.getName());
    model.addAttribute("contactNumber", employee.getContactNumber());
    model.addAttribute("id", employee.getId());
    return "employeeView";

但是,如果您 return ModelAndView,则视图的名称以及呈现视图所需的数据都取自单个 returned 实例。

return new ModelAndView("employeeHome", "employee", new Employee());

在这里你 return 一个 ModelAndView 的实例,它带有视图的名称 ('employeeHome') 和由名为 'employee' 的属性中的 Employee 对象表示的数据。

每个选项的使用差异不大,所以请使用您觉得更方便的选项。

您也可以查看这篇文章以获得更清晰的理解: https://www.baeldung.com/spring-mvc-model-model-map-model-view