个人学习参考所用,勿喷!
6.处理异常、为控制器的属性赋值
6.1)处理异常。
在Web应用上下文中注册一个或者多个异常解析器Bean用来捕获异常。可以得到比在web.xml中配置HTTP错误类型来返回有好页面的方式更加简装的效果。这些异常解析器Bean都实现了HandlerExceptionReslover接口,目的也是为了DispatcherServlet能够自动检测加载它们。当然Spring也有自己的内置实现SimpleMappingExceptionResolver。
这里我们定义一个自己的异常实现:
public class ReservationNotAvailableException extends RuntimeException {
public static final long serialVersionUID = 1L;
private String courtName;
private Date date;
private int hour;
//Constructors and Getters
...
}
想在在Web应用上下文中配置注册这个异常处理:
<!-- View exception resolver --> <bean class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver"> <property name="exceptionMappings"> <props> <prop key="com.apress.springrecipes.court.service.ReservationNotAvailableException"> reservationNotAvailable </prop> <!-- Define catch all class or property defaultErrorView --> <prop key="java.lang.Exception">error</prop> </props> </property> <property name="defaultErrorView" value="error" /> </bean>
通过上面的配置,在ReservationNotAvailableException类型的异常出现的时候显示设定的reservationNotAvailable逻辑视图对应的视图对象。 这里显然可以添加多个<prop>异常。配置defaultErrorView映射到error逻辑视图,或者通过<prop key="java.lang.Exception">error</prop>配置也是一样的效果和好的习惯。从以下的异常处理页面中可以看到,异常实例可以由${exception}变量访问:
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
<html>
<head>
<title>Reservation Not Available</title>
</head>
<body>
Your reservation for ${exception.courtName} is not available on
<fmt:formatDate value="${exception.date}" pattern="yyyy-MM-dd" /> at
${exception.hour}:00.
</body>
</html>
6.2)为控制器的属性赋值。
@value注解是的控制器字段能够使用SpEL赋值。从应用上下文的Bean中 提取需要的字段值赋给控制器的属性。
@Value("#{messageSource.getMessage('admin.email',null,'zh')}")
private String email;
这里的messageSource代表Bean org.springframework.context.support.ResourceBundleMessageSource 的值。
参考:
juyon的blog:《spring3 MVC国际化支持之中文乱码》
Gary Mark等的书籍:《Spring Recipes》2ed