SpringMVC之ModelAndView的用法

最近在学习用ssm架构来实现数据库的增删改查
用了ModelAndView类,记录一下使用,便于我理解代码

使用ModelAndView类用来存储处理完后的结果数据,以及显示该数据的视图。从名字上看ModelAndView中的Model代表模型,View代表视图,这个名字就很好地解释了该类的作用。业务处理器调用模型层处理完用户请求后,把结果数据存储在该类的model属性中,把要返回的视图信息存储在该类的view属性中,然后让该ModelAndView返回该Spring MVC框架。框架通过调用配置文件中定义的视图解析器,对该对象进行解析,最后把结果数据显示在指定的页面上。

一,具体作用:

1、返回指定页面

ModelAndView构造方法可以指定返回的页面名称,

也可以通过setViewName()方法跳转到指定的页面 ,

2、返回所需数值

二,ModelAndView()

这个构造方法构造出来的ModelAndView 

不能直接使用,应为它没有指定view,也没有绑定对应的model对象。当然,model对象不是必须的,但是view确实必须的。

用这个构造方法构造的实例主要用来在以后往其中加view设置和model对象。 

给ModelAndView实例设置view的方法有两个:

setViewName(String viewName)setView(View view)

前者是使用viewname,后者是使用预先构造好的View对象。其中前者比较常用。事实上View是一个接口,而不是一个可以构造的具体类,我们只能通过其他途径来获取View的实例。对于viewname,它既可以是jsp的名字,也可以是tiles定义的名字,取决于使用的ViewNameResolver如何理解这个view name。

对给ModelAndView实例设置model,有三个方法可以使用:

addObject(Object modelObject)
addObject(String modelName, Object modelObject)
addAllObjects(Map modelMap)

ModelAndView可以接收Object类型的对象,ModelAndView
将它视为其众多model中的一个。当使用Object类型的对象的时候,必须指定一个名字。

ModelAndView也可以接收没有明显名字的对象,原因在于ModelAndView
将调用spring自己定义的Conventions 类的.getVariableName()方法来为这个model生成一个名字。显然,对model而言,名字是必须的。

Conventions.getVariableName()生成名字的规则是使用对象的类名的小写模式来作model名字。当这个model是集合或数组的时候,使用集合的第一个元素的类名加s来作model的名字。

ModelAndView也可以接收Map类型的对象,ModelAndView
将这个Map中的元素视为model,而不是把这个Map本身视为model。但是其他的集合类可以用本身作为model对象。

实际上,ModelAndView对model的支持来自于类ModelMap,这个类继承自HashMap。

这里是用了方法
setViewName(String viewName)
addObject(String modelName, Object modelObject)

源代码
package com.zhongruan.controller;

import com.zhongruan.bean.UserInfo;
import com.zhongruan.service.IUserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;

import java.util.List;
@Controller
@RequestMapping(“user”)
public class UserController {
@Autowired
private IUserService userService;

@RequestMapping("/findAll.do")
public ModelAndView findAll(){
    // 接收查询的信息
    List<UserInfo> userInfos=userService.findAll();
    
    //创建一个模型视图对象
    ModelAndView mv=new ModelAndView();
    
   //将数据放置到ModelAndView对象中,第二个参数可以是任何java类型
    //添加模型数据用addObject;  设置视图setViewName;
    mv.addObject("ui",userInfos);
    
    // 放入jsp路径 
    // 设置转向地址
    mv.setViewName("allUser");
    //返回ModelAndView对象mv
    return mv;
}

@RequestMapping("/AddUser.do")

public ModelAndView adduser(UserInfo user){
ModelAndView mv = new ModelAndView();
mv.setViewName(“addUser”);
return mv;
}

@RequestMapping("/save.do")
public String save(UserInfo user){
    int id= user.getId();
    if(userService.searchbyId(id)!=null)
    {
    return "redirect:/user/AddUser.do";
    }
    userService.adduser(user);
    return "redirect:/user/findAll.do";
}

@RequestMapping("/toUpdate.do")
public ModelAndView toUpdateUser(int id) {
    UserInfo user = userService.searchbyId(id);
    ModelAndView mv = new ModelAndView();
    mv.addObject("userInfo",user);
    mv.setViewName("updateUser");
    return mv;
}

@RequestMapping("/update.do")
public String update(UserInfo u) {
    userService.update(u);
    return "redirect:/user/findAll.do";
}

@RequestMapping("/delete.do")
public String delete(int id) {
    userService.deletebyId(id);
    return "redirect:/user/findAll.do";
}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值