SpringMVC数据输出

SpringMVC数据输出

1-数据输出

SpringMVC将数据携带给页面的储存工具,有三种,map,ModelMap,model,它们在底层实质还是使用到了BindingAwareModelMap,对数据进行存储:

在这里插入图片描述

此外,也可以使用ModelAndView携带数据回传页面,实现代码如下

/**
 * 向页面回传数据显示 handle01/02/03
 * 使用 model map modelMap 回传数据 放置在request中
 */
@RequestMapping("/handle01")
public String handler01(Map<String, String> map) {
    map.put("msg","你好1!");
    return "success";
}

@RequestMapping("/handle02")
public String handler02(Model model) {
    model.addAttribute("msg","你好2");
    return "success";
}

@RequestMapping("/handle03")
public String handler03(ModelMap modelMap) {
    modelMap.addAttribute("msg","你好3");
    return "success";
}

/**
 * modelAndView 携带数据
 */

@RequestMapping("/handle04")
public ModelAndView handler(){
    ModelAndView mv = new ModelAndView("success");
    mv.addObject("msg","你好04");
    return mv;
}

2-@ModelAttribute注解

使用@ModelAttribute注解,可以得到请求参数中的某个对象,而不是自己new出来的对象,所有带有ModelAttribute注解的方法都会提前于目标方法运行,将对象放置在request域中,然后在目标方法中获取,代码示例:

// 先于目标方法执行,获取了数据库中的斗个对象的信息
@ModelAttribute
public void hahaMyModelAttribute(Map<String, Object> map){
        
Book book = new Book(100, "西游记", "吴承恩", 98, 10, 98.98);
    System.out.println("数据库中查到的图书信息是:"+book);
    map.put("haha", book);
    b1 = book;
    o1 = map;
    System.out.println("modelAttribute方法...查询了图书并给你保存起来了...他用的map的类				型:"+map.getClass());
    }
}

// 目标方法,在目标方法中使用查询到的对象
@RequestMapping("/updateBook")
public String updateBook(@ModelAttribute("haha")Book book,Map<String, Object> model){
    o2 = model;
    b2  = book;
    Object haha = model.get("haha");
    //System.out.println("传入的model:"+model.getClass());
    System.out.println("o1==o2?"+(o1 == o2));
    System.out.println("b1==b2?"+(b1 == b2)+"-->"+(b2 == haha));
     System.out.println("页面要提交过来的图书信息:"+book);
    return "success";
    }

这样做的好处在于,避免了全字段修改,不给值的地方Spring会默认使用null进行代替,这回在修改之前每个键值对都有值。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值