Spring MVC怎么提交数据和怎么将数据显示到UI层
数据提交
1 .提交的域名称和处理方法的参数名称一致即可
http://localhost:8080/data/hello.do?name=zhangsan
@RequestMapping("/hello")
public String hello(String name){
System.out.println(name);
return "index.jsp";//注意是没有视图解析器的时候
}
这种方式和Struts2相比爽很多,因为是作为方法的参数进行传递的,是一个局部变量,用过以后就被回收了,而Struts2是一个全局的变量,用了以后还在(但是对Struts2来说没有关系,因为Struts2默认是多例的,每次都会重新new一个),对Spring MVC来说是单例的(基于方法的设计)。
如何测试是否是单例:
在类上加一个构造方法(方法里写输出),测试发现无论请求几次构造方法里面的内容都只运行一次,在控制台中间部分会看到。(类会先解析,再根据请求方法处理)
public HelloController() {
System.out.println("Hello Constructor");
}
2 . 如果不一致,方法参数里面用@RequestParam注解
http://localhost:8080/data/hello.do?uname=zhangsan
(必须uname,name不可以了)
@RequestMapping("/hello")
// uname是提交域的名字
public String hello(@RequestParam("uname")String name){
System.out.println(name);
return "index.jsp";//注意是没有视图解析器的时候
}
3 . 提交的是一个对象
(Struts2是将对象声明为属性,然后在URL输入的是对象的名称.属性)
http://localhost:8080/data/user.do?name=zhangsan&pwd=111
(要求提交的表单域名和对象的属性一致,参数使用对象即可)
@RequestMapping("/user")
public String user(User user){
System.out.println(user);
return "index.jsp";
}
public class User {
private int id;
private String name;
private String pwd;
//省略set/get方法,右键source快捷键
数据显示到UI层
1 . 通过ModelAndView——需要视图解析器
//相当于request.setAttribute("msg", "hello spring mvc");
mv.addObject("msg", "hello spring mvc");
// 设置视图名
mv.setViewName("hello");
2 .通过ModelMap(必须在方法参数里)来实现——不需要视图解析器
http://localhost:8080/data/hello2.do?name=zhangsan
@RequestMapping("/hello2")
public String hello2(String name,ModelMap model){
model.addAttribute("name", name);
System.out.println(name);
return "index.jsp";//注意是没有视图解析器的时候
}
总结:
ModelAndView和ModelMap的区别:
- 相同点:两者都可以将数据封装到表示层中
- 不同点:ModelAndView可以指定跳转的视图名称,ModelMap不可以。ModelAndView需要配置视图解析器,ModelMap不需要