标签:情况下 使用 cell java out 渲染 and etag com
在一个Controller内,被@ModelAttribute标注的方法会在此controller的每个handler方法执行前被执行。
被@ModelAttribute标注的方法的参数绑定规则和普通handler方法相同。
可以理解为:
这种情况,@ModelAttribute只是单纯的作为请求路由的第一站,使用者可在方法内部操作Model和Request等参数实现功能。
对于如下请求:
http://localhost:8080/TestModelAttributeController/testHandler.action?reqParam=123
对应的Controller:
@Controller @RequestMapping("/TestModelAttributeController") public class TestModelAttributeController { @ModelAttribute public void modelAttributeMethod(HttpServletRequest request, String reqParam, Model model){ model.addAttribute("reqParam",reqParam); request.setAttribute("methodParam","Hello ModelAttribute"); } @RequestMapping("/testHandler") public String testHandler(){ return "testModelAttribute"; } }
testModelAttribute.jsp如下:
<%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head> <title>Title</title> </head> <body> <h1>${reqParam}</h1> <h1>${methodParam}</h1> </body> </html>
最终可以在页面中看到:
123
Hello ModelAttribute
这种情况,@ModelAttribute会将返回值放到Model中,并将该类型名称的首字母小写作为model中的属性名。
请求地址和参数不变。
对应的Controller:
@ModelAttribute public User userModelAttributeMethod2(){ User user = new User(); user.setAge(31); user.setName("James"); user.setEmail("123456@qq.com"); return user; //相当于model.addAttribute("user",user); } @RequestMapping("/testHandler") public String testHandler(Model model){ System.out.println(model.containsAttribute("user")); //true return "testModelAttribute";
}
对应的jsp页面
<h1>${user.age}</h1> <h1>${user.email}</h1> <h1>${user.name}</h1>
实际上,对于返回类型为void的方法,@ModelAttribute也会在model中添加一对键值对,“void”->"null"
这种情况下,@ModelAttribute会将返回值放到Medel中,且对应的key值为@ModelAttribute置顶的属性名
对应的Controller:
@ModelAttribute("myUser") public User userModelAttributeMethod2(){ User user = new User(); user.setAge(31); user.setName("James"); user.setEmail("123456@qq.com"); return user; //相当于model.addAttribute("user",user); } @RequestMapping("/testHandler") public String testHandler(Model model){ System.out.println(model.containsAttribute("user")); //true return "testModelAttribute"; }
对应的jsp页面:
<h1>${myUser.age}</h1> <h1>${myUser.email}</h1> <h1>${myUser.name}</h1>
这种情况下:
@Controller @RequestMapping("/TestModelAttributeController") public class TestModelAttributeController { @RequestMapping("/testModelAttribute") @ModelAttribute("result") public String testModelAttribute(){ return "excellent"; }
<body> <h1>${result}</h1> </body>
如上Controller和jsp:
testModelAttribute方法的作用是:
标签:情况下 使用 cell java out 渲染 and etag com
原文地址:https://www.cnblogs.com/canger/p/10241576.html