最近在学习用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";
}
}