Spring 常用注解-@ModelAttribute视图数据渲染

@ModelAttribute也是Spring MVC中非常重要的注解之一,它主要绑定方法的参数或者方法的返回值为一个 命名属性 ,并且暴露给view使用。

下面我们就看两个小例子,它如何绑定方法参数与返回值给视图

案例

搭建环境

参考Spring MVC入门案例,https://www.jianshu.com/p/2104239df637,搭建好运行环境。

  1. 准备一个模型对象
public class User {
    private String id;
    private String name;
    private Integer age;

    public Integer getAge() {
        return age;
    }

    public void setAge(Integer age) {
        this.age = age;
    }

    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    @Override
    public String toString() {
        return "User{" +
                "id='" + id + '\'' +
                ", name='" + name + '\'' +
                ", age=" + age +
                '}';
    }
}

2 . 准备jsp页面,放在WEB-INF目录下的views目录,记得配置viewresolever

    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="prefix" value="/WEB-INF/views/" />
        <property name="suffix" value=".jsp" />
     </bean>

jsp页面

<%--
  Created by IntelliJ IDEA.
  User: aihe
  Date: 2018/11/15
  Time: 上午7:50
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>

<h2> msg:${msg}</h2>
<p>ID: ${user.id}</p>
<p>name: ${user.name}</p>
<p>age: ${user.age}</p>

</body>
</html>

3 .看下项目目录结构, 这次我们只用到ModelController,其它的控制器都没有用到。

image.png

作为方法参数

  1. 写好控制器,将@ModelAttribute标注在user入参的地方。
@Controller
@RequestMapping("/model")
public class ModelController {

    @RequestMapping("/parameter")
    public String parameter(
            @ModelAttribute("user") User user
    ) {

        return "index";
    }
}

  1. 测试访问,可以看到入参成功的被注入到了视图上面
image

作用在方法上

  1. 将控制器对象更改为如下
@Controller
@RequestMapping("/model")
public class ModelController {

    @ModelAttribute
    public User initUser(){
        User user = new User();
        user.setName("default");
        return user;
    }

    @RequestMapping("/parameter")
    public String parameter(
            @ModelAttribute("user") User user
    ) {

        return "index";
    }
}

2 . 再次进行测试,虽然我们没有传入name参数,但是还要有name的值存在。

Note: 因为Spring在处理请求的时候,发现控制器内有方法上标注@ModelAttribute的方法,会优先执行这个方法。然后如果方法有返回值,会将方法的返回值添加到模型中。

image

最后

这次一起看了@ModelAttribute注解。学习了它的用法。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • Spring Web MVC Spring Web MVC 是包含在 Spring 框架中的 Web 框架,建立于...
    Hsinwong阅读 23,064评论 1 92
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 137,094评论 19 139
  • 16. Web MVC 框架 16.1 Spring Web MVC 框架介绍 Spring Web 模型-视图-...
    此鱼不得水阅读 1,191评论 0 4
  • 今年寒假又一次来到云南,不知道这是第几次去云南了,只觉路上的风景看过很多遍,可是每次看的时候都会有新的感受。 长...
    超华君阅读 643评论 2 3
  • 以下才是我要敲黑板强调并希望您能回答的: 1. 如果换作是您,也会像我这样难受(委屈和愤怒)吗? 会的,因为我觉得...
    晋春77阅读 144评论 0 0

友情链接更多精彩内容