Spring3.1から導入されたflashスコープを使う
「リダイレクト先で完了メッセージを表示する」といったよくありがちな用途ですごく便利なSpring 3.1から実装された機能、「flash scope」なのですが、どうも昔ながらの設定ファイルで使われていたクラスだと使えないようです。
https://jira.springsource.org/browse/SPR-8782
詳しい説明はこちら。
http://www.infoq.com/jp/news/2011/11/spring-3.1-rc1-release
Spring 3.1にはアノテーションが付加されたコントローラでリクエストを処理するための新しいクラスが用意されている。RequestMappingHandlerMapping、RequestMappingHandlerAdapter、ExceptionHandlerExceptionResolverの3つだ。この3つのクラスはそれぞれDefaultAnnotationHandlerMapping、AnnotationMethodHandlerAdapter、AnnotationMethodHandlerExceptionResolverの3つの代替物だ。これらの新しいクラスはアノテーションコントローラがカスタマイズ可能で拡張しやすいかたちでクラスをサポートできるようにするために開発された。将来はこれらのクラスを使うことが推奨されている。
というわけらしいのですが、ExceptionHandlerExceptionResolverについてはなくてもflashスコープを使う上では支障がなかったです。なんで、以下のような感じでApplicationContext.xmlを記述してあげるとよいのではないかと。
ApplicationContext.xml
<bean id="handlerMapping" class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping"> </bean> <bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter"> <property name="synchronizeOnSession" value="true" /> <property name="webBindingInitializer" ref="webBindingInitializer" /> </bean>
昔の古いApplicationContext.xmlとか流用してると、特にハマりそうですよね。
ちなみにSpring3とかSpring MVCとか触るなら、この本が結構良い感じでした。
J2EE系のアーキテクチャにある程度詳しくないとわかりずらい部分ありますけど、逆にそのへんを他のフレームワークとかで押さえてれば充分だと思います。
たまに筆者さんの愚痴っぽい解説が交じるのは、ご愛嬌って感じで。JavaのWebアプリっていろいろめんどくさいですよねー