File APIs for Java Developers
Manipulate DOC, XLS, PPT, PDF and many others from your application.
http://aspose.com/file-tools
The moose likes Spring and the fly likes Why is HandlerInterceptorAdapter postHandle method getting invoked after page is rendered Big Moose Saloon
  Search | Java FAQ | Recent Topics | Flagged Topics | Hot Topics | Zero Replies
Register / Login


Win a copy of OCA/OCP Java SE 7 Programmer I & II Study Guide this week in the OCPJP forum!
JavaRanch » Java Forums » Frameworks » Spring
Bookmark "Why is HandlerInterceptorAdapter postHandle method getting invoked after page is rendered" Watch "Why is HandlerInterceptorAdapter postHandle method getting invoked after page is rendered" New topic
Author

Why is HandlerInterceptorAdapter postHandle method getting invoked after page is rendered

Suman Poluri
Greenhorn

Joined: Aug 04, 2009
Posts: 7
My Spring MVC web app has a navigation menu at the top of the page with links to a list of items. The list of items is retrieved from the database. This menu is common to all pages in the application. Currently, in every controller, I retrieve and store the list of items in session (if not already in session), so that it is available on every page. It works fine, but I feel this there should be a better way to do this. To avoid this redundancy, I am now trying to use a HandlerInterceptorAdapter. I am able to get it work, but not perfectly. The first time I load the page, I do not see the object I set in session. But, if I refresh the page, I do see the object in session.

I created my interceptor this way:


I declared the interceptor:

I am checking if the object is set in session by the time the jsp renders:


With that, when I first load the page, I see the following print in the console:


My understanding is that the posthandle method is invoked before the page is rendered. However, according to the output on the console, I see that the jsp is being rendered before the interceptor's posthandle method.

Can anyone help me understand why it is behaving this way?
Suman Poluri
Greenhorn

Joined: Aug 04, 2009
Posts: 7
On further investigation, I found the issue to be in the way I configured my spring context xml files. I had two files - one for the application context and the other for the web context. Initially I defined the component-scan and mv:annotation-driven tags in the application context xml:

and defined my interceptors in the web context xml.

In the debug mode, I saw that the interceptors were getting mapped to the context after the request is processed.

To make it work, I changed the configuration in the application context to the following:

and added the following to the web context xml:


I am still trying to understand why this worked and the earlier configuration did not.
 
Consider Paul's rocket mass heater.
 
subject: Why is HandlerInterceptorAdapter postHandle method getting invoked after page is rendered