处理提交的数据
1.提交的域名称和处理方法的参数名一致
例如提交的URL为:
http://localhost:8080/springmvc_05_controller_war_exploded/test/t1?name=yf
处理的方法为
@Controller
@RequestMapping("/test")
public class UserController {
@RequestMapping("/t1")
public String test1(String name, Model model){
//1.接收前端数据
//2.将返回的结果传递给前端
model.addAttribute("msg",name);
//3。跳转视图
return "test";
}
}
2.提交的域名称和处理方法的参数名不一致
例如提交的URL为:http://localhost:8080/springmvc_05_controller_war_exploded/test/t1?username=yf
在方法的参数前面加上@RequestParam就可以使用别名来接受前端传递来的参数了。
@Controller
@RequestMapping("/test")
public class UserController {
@RequestMapping("/t1")
public String test1(@RequestParam("username") String name, Model model){
//1.接收前端数据
//2.将返回的结果传递给前端
model.addAttribute("msg",name);
//3。跳转视图
return "test";
}
}
建议:如果是需要从前端接收数据的参数,最好都加上@RequestParam,不管前端的参数是不是和方法中的参数同名,这样可以明显的看出方法中的哪些参数是从前端传递过来的。
3.从前端接收的是一个对象:id name age
例如URL地址为:http://localhost:8080/springmvc_05_controller_war_exploded/test/t2?id=1&name=yf&age=21
方法中的参数直接设置为一个对象就行
@RequestMapping("/t2")
public String test2(User user){
System.out.println(user);
return "test";
}
输出的结果就是一个对象,说明从前端传递过来的数据都接收到了。
接收前端用户传递参数过程:
1.拿到参数的名字,如果参数的名字在方法的参数中有,可以直接使用
2.如果传递的是一个对象,拿参数的名字去匹配对象的字段,如果一致,就可以使用 ,否则就匹配不到。
数据回显
第一种通过ModelAndView
public class ControllerTest3 implements Controller {
@Override
public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response) throws Exception {
ModelAndView modelAndView = new ModelAndView();
modelAndView.addObject("msg","ModelAndView");
modelAndView.setViewName("test");
return modelAndView;
}
}
然后再去spring配置文件中注册一下controller就可以使用了。
<bean class="com.yf.controller.ControllerTest3" id="/test3"/>
id就是可以访问的地址。
第二种Model
@Controller
@RequestMapping("/test")
public class UserController {
@RequestMapping("/t1")
public String test1(@RequestParam("username") String name, Model model){
//1.接收前端数据
//2.将返回的结果传递给前端
model.addAttribute("msg",name);
//3。跳转视图
return "test";
}
}
基于注解的不需要配置bean对象了。
第三种 ModelMap使用起来和Model看起来无区别
对比:
Model:只有寥寥几个方法只适用于存储数据,简化了对Model对象的操作和理解。
ModelMap:继承了LinkedMap,除了实现自身的一些方法,同样的继承了linkedMap的方法和特性。
ModelAndView:可以在存储数据的同时,可以进行设置返回的逻辑视图,进行控制展示层的跳转。