Spring3 MVC的最佳实践和理解(6)

 

个人学习参考所用,勿喷! 

 

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

猜你喜欢

转载自kingxss.iteye.com/blog/1496981
今日推荐