springmvc处理模型数据

springmvc处理模型数据

很多情况下页面上需要很多数据,单单返回页面是不行的,那么springmvc如何将数据返回到该页面呢

springmvc提供了四种方式来输出模型数据

  • ModelAndView: 处理返回值为ModelAndView时,可以将该对象中添加数据模型
  • Map及Model:入参为Model、ModelMap或Map时,处理方法返回时,Map中的数据会自动添加到模型中
  • @SessionAttributes: 将模型中的某个属性暂存到HttpSession中,以便多个请求之间共享数据
  • @ModelAttribute: 方法入参标注该注解后,入参的对象就会放到数据模型中

使用BindingResult和Errors来处理绑定错误

ModelAndView

主要有两个重要的变量

复制代码
// 视图  可以传字符串(视图名字)也可以传View对象
private Object view;
// 数据模型 本质是一个map
private ModelMap model;

视图相关的方法

复制代码
// 设置视图
public void setViewName(String viewName) {
    this.view = viewName;
}
// 获取视图
public String getViewName() {
    return this.view instanceof String ? (String)this.view : null;
}

数据模型相关方法

复制代码
// 获取数据模型
protected Map<String, Object> getModelInternal() {
  return this.model;
}

public ModelMap getModelMap() {
  if (this.model == null) {
    this.model = new ModelMap();
  }

  return this.model;
}

public Map<String, Object> getModel() {
  return this.getModelMap();
}

// 添加视图模型
public ModelAndView addObject(String attributeName, Object attributeValue) {
  this.getModelMap().addAttribute(attributeName, attributeValue);
  return this;
}

springmvc底层使用request.setAttribute(name,value)来将数据放入到请求中

示例:

复制代码
@RequestMapping("/modelAndViewTest")
public ModelAndView modelAndViewTest(){
    // 视图名
    ModelAndView modelAndView = new ModelAndView("modelAndViewTest");
    // 包含的数据
    modelAndView.addObject("dateTime",new Date());
    return modelAndView;
}

Map及Model

复制代码
@RequestMapping("/mapTest")
public String mapTest(Map<String,String> map){
    System.out.println(map.getClass()); //class org.springframework.validation.support.BindingAwareModelMap
    map.put("name","张三");
    return "hello";
}

@SessionAttributes

在类上添加@SessionAttributes可以使该类所代表的路径下的session共享

复制代码
@Controller
@RequestMapping("helloWorld")
// 设置name属性共享
@SessionAttributes(value={"name"})
public class HelloWorldController {

    @RequestMapping("/mapTest")
    public String mapTest(Map<String,String> map){
        System.out.println(map.getClass()); //class org.springframework.validation.support.BindingAwareModelMap
        map.put("name","张三");
        return "hello";
    }

   // 可以在该方法中获取到name值为张三
    @RequestMapping("/sessionAttributes")
    public String sessionAttributes(HttpSession session){
        System.out.println(session.getAttribute("name"));
        return "hello";
    }
}

@ModelAttribute

可以放到方法上或者参数上,它将方法参数或方法返回值绑定到命名中的Model属性中,然后将其公开给Web视图。如果我们在方法级别使用它,则表明该方法的目的是添加一个或多个模型属性。另一方面,当用作方法参数时,它表示应从模型中检索参数。如果不存在,我们应该首先实例化它,然后将其添加到Model中。一旦出现在模型中,我们应该填充所有具有匹配名称的请求参数的参数字段

BindingResult和Errors

用来处理绑定过程中的错误,使用@Vaild注解标注在方法参数上,会对参数对象进行校验,校验结果放在BindingResult对象中

https://zhhll.icu/2021/框架/springmvc/基础/3.springmvc处理模型数据/

本文由mdnice多平台发布

相关推荐
蛋蛋的就会顺顺的2 小时前
hot100 p0——栈,贪心算法,动态规划
java·前端·javascript·算法·leetcode·力扣
需要8263 小时前
Spring Bean 生命周期:从实例化到销毁的完整钩子
java·后端·spring
小 黄 鸡3 小时前
HashMap 面试必会知识点详解(JDK 8)
java·面试·职场和发展
伯恩bourne5 小时前
Spring Boot Bean 注册的两种方式:@Component 家族 vs @Configuration + @Bean
java·spring boot·后端
silvamux_5 小时前
curl 测试 OpenAI 兼容 API 的完整流程
java·人工智能·缓存·ai·oneapi
省钱兄--zs6 小时前
深圳24小时自助健身房软硬件解决方案实战指南与开发流程详解
java·数据仓库·spring boot·小程序·架构
顽疲6 小时前
Java vue 养老系统源码详解:月账单 care_month_bill 与 Quartz 扣费 Job 实践
java·开发语言·vue.js·vue养老·springboot养老·java养老
Wang's Blog6 小时前
Java 项目实战: 交友项目 - 安装开发工具与环境准备
java·开发语言·交友
用户21296835261686 小时前
开源了一个 Java 多智能体 LLM 框架 Baton:一个依赖,把 Agent 循环、工具调用、记忆、编排全配齐
java·llm
helmsail7 小时前
05 管理活动与选品
java