Spring MVC学习(六)-------注解式控制器详解5
来源:互联网 发布:讲课视频软件 编辑:程序博客网 时间:2024/05/21 00:53
6.6.2、@RequestParam绑定单个请求参数值
Java代码
- public String requestparam1(@RequestParam String username)
Java代码
- public String requestparam2(@RequestParam("username") String username)
Java代码
- public String requestparam4(@RequestParam(value="username",required=false) String username)
Java代码
- public String requestparam5(
- @RequestParam(value="username", required=true, defaultValue="zhang") String username)
Java代码
- public String requestparam7(@RequestParam(value="role") String roleList)
Java代码
- public String requestparam7(@RequestParam(value="role") String[] roleList)
Java代码
- public String requestparam8(@RequestParam(value="list") List<String> list)
6.6.3、@PathVariable绑定URI模板变量值
Java代码
- @RequestMapping(value="/users/{userId}/topics/{topicId}")
- public String test(
- @PathVariable(value="userId") int userId,
- @PathVariable(value="topicId") int topicId)
6.6.4、@CookieValue绑定Cookie数据值
Java代码
- public String test(@CookieValue(value="JSESSIONID", defaultValue="") String sessionId)
Java代码
- public String test2(@CookieValue(value="JSESSIONID", defaultValue="") Cookie sessionId)
6.6.5、@RequestHeader绑定请求头数据
Java代码
- @RequestMapping(value="/header")
- public String test(
- @RequestHeader("User-Agent") String userAgent,
- @RequestHeader(value="Accept") String[] accepts)
6.6.6、@ModelAttribute绑定请求参数到命令对象
Java代码
- public String test1(@ModelAttribute("user") UserModel user)
Java代码
- @RequestMapping(value="/model2/{username}")
- public String test2(@ModelAttribute("model") DataBinderTestModel model) {
Java代码
- @ModelAttribute("cityList")
- public List<String> cityList() {
- return Arrays.asList("北京", "山东");
- }
Java代码
- @ModelAttribute("user") //①
- public UserModel getUser(@RequestParam(value="username", defaultValue="") String username) {
- //TODO 去数据库根据用户名查找用户对象
- UserModel user = new UserModel();
- user.setRealname("zhang");
- return user;
- }
Java代码
- @RequestMapping(value="/model1") //②
- public String test1(@ModelAttribute("user") UserModel user, Model model)
Java代码
- public @ModelAttribute("user2") UserModel test3(@ModelAttribute("user2") UserModel user)
Java代码
- public String test4(@ModelAttribute UserModel user, Model model)
- 或
- public String test5(UserModel user, Model model)
Java代码
- public @ModelAttribute List<String> test6()
- 或
- public @ModelAttribute List<UserModel> test7()
6.6.7、@SessionAttributes绑定命令对象到session
Java代码
- //1、在控制器类头上添加@SessionAttributes注解
- @SessionAttributes(value = {"user"}) //①
- public class SessionAttributeController
- //2、@ModelAttribute注解的方法进行表单引用对象的创建
- @ModelAttribute("user") //②
- public UserModel initUser()
- //3、@RequestMapping注解方法的@ModelAttribute注解的参数进行命令对象的绑定
- @RequestMapping("/session1") //③
- public String session1(@ModelAttribute("user") UserModel user)
- //4、通过SessionStatus的setComplete()方法清除@SessionAttributes指定的会话数据
- @RequestMapping("/session2") //③
- public String session(@ModelAttribute("user") UserModel user, SessionStatus status) {
- if(true) { //④
- status.setComplete();
- }
- return "success";
- }
Java代码
- //1、RequestMappingHandlerAdapter首先调用ModelFactory的initModel方法准备模型数据:
- modelFactory.initModel(webRequest, mavContainer, requestMappingMethod);
- //2、调用@RequestMapping注解的功能处理方法
- requestMappingMethod.invokeAndHandle(webRequest, mavContainer);
- //3、更新/合并模型数据
- modelFactory.updateModel(webRequest, mavContainer);
Java代码
- Map<String, ?> attributesInSession = this.sessionAttributesHandler.retrieveAttributes(request);
- //1.1、将与@SessionAttributes注解相关的会话对象放入模型数据中
- mavContainer.mergeAttributes(attributesInSession);
- //1.2、调用@ModelAttribute方法添加表单引用对象
- invokeModelAttributeMethods(request, mavContainer);
- //1.3、验证模型数据中是否包含@SessionAttributes注解相关的会话对象,不包含抛出异常
- for (String name : findSessionAttributeArguments(handlerMethod)) {
- if (!mavContainer.containsAttribute(name)) {
- //1.4、此处防止在@ModelAttribute注解方法又添加了会话对象
- //如在@ModelAttribute注解方法调用session.setAttribute("user", new UserModel());
- Object value = this.sessionAttributesHandler.retrieveAttribute(request, name);
- if (value == null) {
- throw new HttpSessionRequiredException("Expected session attribute '" + name + "'");
- }
- mavContainer.addAttribute(name, value);
- }
Java代码
- for (InvocableHandlerMethod attrMethod : this.attributeMethods) {
- String modelName = attrMethod.getMethodAnnotation(ModelAttribute.class).value();
- //1.2.1、如果模型数据中包含同名数据则不再添加
- if (mavContainer.containsAttribute(modelName)) {
- continue;
- }
- //1.2.2、调用@ModelAttribute注解方法并将返回值添加到模型数据中,此处省略实现代码
- }
Java代码
- //3.1、如果会话被标识为完成,此时从会话中清除@SessionAttributes注解相关的会话对象
- if (mavContainer.getSessionStatus().isComplete()){
- this.sessionAttributesHandler.cleanupAttributes(request);
- }
- //3.2、如果会话没有完成,将模型数据中的@SessionAttributes注解相关的对象添加到会话中
- else {
- this.sessionAttributesHandler.storeAttributes(request, mavContainer.getModel());
- }
- //省略部分代码
6.6.8、@Value绑定SpEL表示式
Java代码
- public String test(@Value("#{systemProperties['java.vm.version']}") String jvmVersion)
0 0
- Spring MVC学习(六)-------注解式控制器详解5
- Spring MVC学习(六)-------注解式控制器详解5
- Spring MVC学习(六)-------注解式控制器详解1
- Spring MVC学习(六)-------注解式控制器详解2
- Spring MVC学习(六)-------注解式控制器详解3
- Spring MVC学习(六)-------注解式控制器详解4
- Spring MVC学习(六)-------注解式控制器详解1
- Spring MVC学习(六)-------注解式控制器详解2
- Spring MVC学习(六)-------注解式控制器详解3
- Spring MVC学习(六)-------注解式控制器详解4
- Spring MVC详解(六)注解式控制器详解(1)
- Spring MVC详解(六)注解式控制器详解(1)
- 第六章、SpringMVC学习-注解式控制器详解(3)-Spring MVC 3 生产者、消费者请求限定
- 码农小汪-Spring MVC注解式控制器简介
- Spring MVC学习(四)-------Controller接口控制器详解5
- Spring MVC学习(四)-------Controller接口控制器详解5
- Spring MVC 学习之基于注解的控制器
- Spring MVC 学习之基于注解的控制器
- 为什么while (*s++ = *t++);这句代码的作用是复制字符串?
- Spring MVC学习(六)-------注解式控制器详解4
- jdbc连接sql server 出现 java.sql.SQLException: Network error IOException: Connection refused:
- krpano限制鼠标放大的比列
- STL适配器之priority_queue
- Spring MVC学习(六)-------注解式控制器详解5
- 上传图片类型限制和防止反复提交,php递归删除空文件夹
- 第七讲:c/c++文件的读取、操作和定位
- Android 国际化与屏幕适配!
- 求质数
- 2017年华为实习生面经
- android DataBinding 的简单使用
- Spring MVC学习(七)-------SpringMVC数据类型转换
- 手把手教你写Linux设备驱动---中断(三)--workqueue实现(基于友善之臂4412开发板)