1.概述

其中最重要的spring mvc注释是@ModelAttribute注释。

@ModelAttribute是一个注释,它将方法参数或方法返回值绑定到一个命名的模型属性,然后将其公开给一个web视图。

在下面的示例中,我们将通过一个共同的概念来演示注释的可用性和功能:公司员工提交的表单。

进一步阅读:

模型,ModelMap和ModelAndView在Spring MVC

了解接口金宝搏官网188be模型 , ModelMapModelAndView由Spring MVC提供。

春天@RequestParam注释

Spring的@RequestParam注释的详细指南

2.的@ModelAttribute在深度上

正如引言所示,@ModelAttribute既可以作为方法参数使用,也可以在方法级别使用。

2.1在方法级别

当注释在方法级别使用时,它表明该方法的目的是添加一个或多个模型属性。这些方法支持的参数类型与@RequestMapping方法,但不能直接映射到请求。

让我们看一个简单的例子来理解它是如何工作的:

@ModelAttribute public void addAttributes(Model Model){模型。addAttribute(“msg”,“欢迎来到荷兰!”);}

在这个例子中,我们展示了一个添加名为味精对所有模型S定义在控制器类中。

当然,我们将在本文后面看到它的实际应用。

通常,Spring-MVC总是先调用该方法,然后再调用任何请求处理程序方法。也就是说,@ModelAttribute方法在控制器方法之前被调用@RequestMapping调用。序列背后的逻辑是,必须在控制器方法中开始任何处理之前创建模型对象。

将相应的类注释为也很重要@ControllerAdvice。因此,您可以在其中添加值模型将被标识为全局的。这实际上意味着对于响应部分中的每个方法,每个请求都存在一个默认值。

2.2作为方法参数

当用作方法参数时,它指示应该从模型中检索该参数。当不存在时,应该首先实例化它,然后将其添加到模型中,一旦出现在模型中,就应该从具有匹配名称的所有请求参数填充arguments字段。

方法之后的代码片段中员工控件提交的表单中的数据填充Model属性addEmployee端点。Spring MVC在调用submit方法之前会在后台执行这个操作:

@RequestMapping(value = "/addEmployee", method = RequestMethod.POST) public String submit(@ModelAttribute("employee") employee employee){//使用employee对象的代码返回"employeeView";}

在本文的后面,我们将看到一个完整的示例,说明如何使用员工对象来填充employeeView模板。

因此,它将表单数据与bean绑定。@RequestMapping可以用注解自定义类参数吗@ModelAttribute

这就是Spring-MVC中通常所说的数据绑定,这是一种常见的机制,可以让您不必单独解析每个表单字段。

3.形式的例子

在本节中,我们将提供概述部分中提到的示例:一个非常基本的表单,它提示用户(在我们的特定示例中是公司的雇员)输入一些个人信息(特别是的名字id)。在提交完成并且没有任何错误之后,用户希望看到之前提交的数据显示在另一个屏幕上。

3.1视图

让我们先创建一个包含id和name字段的简单表单:

  name    id    

3.2控制器

下面是控制器类,上面提到的视图的逻辑就是在这里实现的:

@Controller @ControllerAdvice public class EmployeeController {private Map employeeMap = new HashMap<>();@RequestMapping(value = "/addEmployee", method = RequestMethod.POST) public String submit(@ModelAttribute("employee") employee employee, BindingResult result, ModelMap model) {if (result. haserrors ()) {return "error";}模型。addAttribute(“名字”,employee.getName ());模型。addAttribute(“id”,employee.getId ());employeeMap.put (employee.getId()、员工);返回“employeeView”;@ModelAttribute public void addAttributes(Model Model){模型。addAttribute(“msg”,“欢迎来到荷兰!”);}}

提交()方法,我们有员工对象绑定到视图。你能看到这个注释的力量吗?您可以简单地将表单字段映射到对象模型。在该方法中,我们从表单中获取值并将其设置为ModelMap

最后我们回来了employeeView,这意味着相应的JSP文件将被调用为视图代表。

此外,还有addattribute ()方法。它的目的是在模型这将被全球识别。也就是说,对于每个控制器方法的每个请求,都会返回一个默认值作为响应。我们还必须将特定的类注释为@ControllerAdvice

3.3模型

如前所述模型对象非常简单,包含了“前端”属性所需的所有内容。现在,让我们来看一个例子:

@XmlRootElement public class Employee {private long id;私人字符串名称;public Employee(long id, String name) {this。id = id;this.name =名称;} //删除标准的getter和setter}

3.4结束

@ControllerAdvice协助控制器,特别是,@ModelAttribute适用于所有的方法@RequestMapping方法。当然,我们的addattribute ()方法将是第一个运行的,先于其余的@RequestMapping方法。

记住这一点,在这之后提交()addattribute ()是运行的,我们可以在视图返回的控制器类,通过在美元化的花括号二组中提及它们的名字,例如${名称}

3.5结果视图

现在让我们打印从表单中接收到的内容:

${msg}

Name: ${Name} ID: ${ID}

4.结论

在本教程中,我们研究了@ModelAttribute注释,用于方法参数和方法级使用案例

文档中可以找到这个简单教程的实现github项目。

通用的底部

开始使用Spring 5和Spring Boot 2,通过学习的春天课程:

>>看看这个课程
对这篇文章的评论关闭!