131
Q: #7.4-1 | 什么是控制器通知
A: 控制器通知(controller advice)是任意带有@ControllerAdvice
注解的类
132
Q: #7.4-2 | 控制器通知会包含一个或多个如下类型的方法 A:
@ExceptionHandler
注解标注的方法;@InitBinder
注解标注的方法;@ModelAttribute
注解标注的方法。
133
Q: #7.4-3 | 如何通过@ControllerAdvice,将所有控制器的异常在同一个地方进行一致处理
A: 通过@ControllerAdvice将所有的@ExceptionHandler方法收集到一个类中,代码如下:
package spittr.web;import org.springframework.web.bind.annotation.ControllerAdvice;import org.springframework.web.bind.annotation.ExceptionHandler;
@ControllerAdvice //定义控制器类public class AppWideExceptionHandler{ @ExceptionHandler(DuplicateSpittleException.class) //定义异常处理方法 public String duplicateSpittleHandler(){ return "errot/duplicate"; }}
134
Q: #7.5-1 | 模型的属性是以请求属性的形式存放在请求中的,在重定向后无法存活。请以图示说明 A:
135
Q: #7.5-2 | 显然在spring中,对于重定向来说,模型并不能用来传递数据。但是我们也有一些其他方案,能够从发起重定向的方法传递数据给处理重定向方法中: A:
- 使用URL模板以路径变量和/或查询参数的形式传递数据;
- 通过flash属性发送数据。
136
Q: #7.5-3 | 在spring中,flash属性的作用,和实现方式 A:
- 作用:在会话(跨定向会话)中携带数据。按照定义,flash属性会一直携带这些数据直到下一次请求,然后才会消失。
- Spring提供了通过RedirectAttributes设置flash属性的方法,这是Spring 3.1引入的Model的一个子接口。RedirectAttributes提供了Model的所有功能,除此之外,还有几个方法是用来设置flash属性的。具体来讲,RedirectAttributes提供了一组addFlashAttribute()方法来添加flash属性。
137
Q: #7.5-4 | 请举个,使用addFlashAttribute()将Spitter对象添加到模型中,的例子 A:
@RequestMapping(value="/register", method=POST)public String processRegistration(Object obj, RedirectAttributes model) { model.addAttribute("username", obj.getUsername()); model.addFlashAttribute("obj", obj); return "redirect:/obj/{username}";}
138
Q: #7.5.5 | flash属性保存在会话中,然后再放到模型中,因此能够在重定向的过程中存活。请图示这个过程 A:
139
Q: #7.6-1 | Spring Web Flow是什么? A: 这是一个构建在Spring MVC之上的流程框架,它能够引导用户执行一系列向导步骤
140
Q: #8.1.1-1 | 简述执行器的作用 A: 流程执行器(flow executor)驱动流程的执行