我的编程空间,编程开发者的网络收藏夹
学习永远不晚

七、Spring MVC之ModelAttribute

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

七、Spring MVC之ModelAttribute

    前面几篇文章分别说了spring mvc如何传参数到后台,如何返回参数到前台。今天来说一下,spring mvc的ModelAttribute注解,这个注解有什么作用,什么场景下使用?


    1、应用场景:数据更新。例如有一个实体User,其中有id、userName、age、email、createTime等属性,createTime定义了用户的创建时间,一般都是后台自动获取并赋值。除了id和createTime之外的User的其他属性,都是可以编辑修改的,如下图所示。

七、Spring MVC之ModelAttribute


而此时我们的后台,一般会使用对象进行接收参数,如下所示:

@RequestMapping("/testModelAttribute")
public String testModelAttribute(User user){
    System.out.println(user);
    return "success";
}

测试代码,设定user的默认值,可以看到后台的输出

User{userName='lxy', password='null', email='test@126.com', 
age=20, createTime=null, address=null}

,user对象只有userName、age、emai有值,其它的都是null:

<form action="/testModelAttribute/testModelAttribute" method="post">
    userName:<input type="text" name="userName" value="lxy"/> <br/>
    age:<input type="text" name="age" value="20"/> <br/>
    email:<input type="text" name="email" value="test@126.com"/> <br/>
    <input type="submit" value="submit" />
</form>


如果我们这个时候更新数据库的话,就需要先查询一下数据库,读出来之前user对象的值,然后把前台传递过来的参数设置到user上,否则就会导致部分数据丢失。

另一种解决方案是在编辑之前,先把数据查询出来,然后在页面上使用隐藏域,把其它的值放在隐藏域中,然后使用在提交form表单的时候,把隐藏域的数据一并提交到后台。


2、配合使用ModelAttribute注解,这里根据参数userName,模拟从数据库中读取数据

@ModelAttribute
public void getUserById(@RequestParam(value = "userName", required = false)
    String userName, Map<String, Object> map) {
    System.out.println("任何时候我都会被调用");
    if(userName != null) {
        //模拟读取数据库中的数据
        User user = new User();
        user.setUserName("lxy");
        user.setAge(18);
        user.setPassword("123456");
        user.setEmail("lxy@126.com");
        user.setCreateTime(new Date());
        map.put("user", user);
    }
}

此时,再次运行项目,可以看到后台的输出为:email和age是前台传递过来的参数,而password和createTime都是从数据库中读取出来的数据,这就可以直接根据user实体,更新数据库了。

User{userName='lxy', password='123456', email='test@126.com', age=20, 
createTime=Mon Mar 20 18:03:31 CST 2017, address=null}


3、注意,访问controller中的任意的方法,都会调用被ModelAttribute注解的方法。所以说这个注解要慎用,在适用在注解之前,需要认真考虑是否真的合适。

@RequestMapping("/testRun")
public String testRun(){
    System.out.println("我就看看会不会调用ModelAttribute注解修饰的方法");
    return "success";
}

访问上面的方法,可以看到下面的输出,被ModelAttribute注解修饰的方法,会先于目标方法执行:

任何时候我都会被调用
我就看看会不会调用ModelAttribute注解修饰的方法


4、在目标方法的参数上使用ModelAttribute注解

上面我们看到在被ModelAttribute注解修饰的方法上,如果要想被取到值,在方法中必须要这样设置,

User user = new User();
user.setUserName("lxy");
user.setAge(18);
user.setPassword("123456");
user.setEmail("lxy@126.com");
user.setCreateTime(new Date());
//如果设置的key为temp,则目标方法上必须要有相应的注解声明,才能起到效果
map.put("temp", user);
@RequestMapping("/testModelAttribute2")
public String testModelAttribute2(@ModelAttribute("temp")User user){
    //这里的temp与被ModelAttribute注解修饰的方法的存放的key一致
    System.out.println(user);
    return "success";
}


项目源代码:

https://git.oschina.net/acesdream/spring-mvc


免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

七、Spring MVC之ModelAttribute

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

spring mvc中注解@ModelAttribute的妙用分享

前言本文主要给大家介绍了关于spring mvc注解@ModelAttribute妙用的相关内容,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍吧。在Spring mvc中,注解@ModelAttribute是一个非常常用的注
2023-05-31

@ModelAttribute注解在spring mvc中的使用方法

@ModelAttribute注解在spring mvc中的使用方法?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。在spring mvc中非常重要的注解@Mod
2023-05-31

spring学习教程之@ModelAttribute注解运用详解

本文主要给大家介绍了关于java中@ModelAttribute使用的相关资料,分享出来供大家参考学习,下面来一起看看详细的介绍:一、@ModelAttribute注释方法 例子(1),(2),(3)类似,被@ModelAttribute注
2023-05-31

Spring MVC之characterEncodingFilter有什么用

characterEncodingFilter是Spring MVC中的一个过滤器。它的作用是用来处理请求和响应的字符编码。在Web开发中,如果不对字符编码进行正确处理,可能会导致乱码问题。比如,当请求中包含非ASCII字符时,如果字符编码
2023-09-21

Spring MVC策略模式之MethodArgumentResolver源码分析

今天小编给大家分享一下Spring MVC策略模式之MethodArgumentResolver源码分析的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,
2023-07-05

Spring核心原理分析之MVC九大组件

Spring MVC九大组件在DispatcherServlet的init()方法中初始化,下面我详细介绍一下Spring MVC九大组件的名称和作用。

Spring MVC之WebApplicationContext_动力节点Java学院整理

如果你使用了listener监听器来加载配置,一般在Struts+Spring+Hibernate的项目中都是使用listener监听器的。如下Java代码 org.springf
2023-05-31

Spring Mvc中传递参数方法之url/requestMapping详解

前言相信大家在使用spring的项目中,前台传递参数到后台是经常遇到的事, 我们必须熟练掌握一些常用的参数传递方式和注解的使用,本文将给大家介绍关于Spring Mvc中传递参数方法之url/requestMapping的相关内容,分享出来
2023-05-31

30个类手写Spring核心原理之MVC映射功能

接下来我们来完成MVC模块的功能,应该不需要再做说明。Spring MVC的入口就是从DispatcherServlet开始的,而前面的章节中已完成了web.xml的基础配置。下面就从DispatcherServlet开始添砖加瓦
SpringMVC面试2024-12-02

Java框架搭建之Maven、Mybatis、Spring MVC整合搭建(图文)

本文主要介绍了Java框架搭建之Maven、Mybatis、Spring MVC整合搭建(图文),分享给大家,具体如下:SSM(Spring+SpringMVC+Mybatis),目前较为主流的企业级架构方案。标准的MVC设计模式,将整个系
2023-05-30

Spring MVC启动之HandlerMapping作用及实现方法是什么

这篇“Spring MVC启动之HandlerMapping作用及实现方法是什么”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇
2023-07-05

编程热搜

目录