Dear Wiki user,

You have subscribed to a wiki page or wiki category on "Struts Wiki" for change 
notification.

The following page has been changed by MichaelJouravlev:
http://wiki.apache.org/struts/StrutsSmartNavigation

New page:
== ASP.NET Approach To Back Button Problem ==

Microsoft being both a web framework vendor and a browser vendor, has built in 
an interesting feature into ASP.NET web framework called !SmartNavigation. When 
Internet Explorer 5.5 or higher receives a response from an ASP.NET application 
and SmartNavigation is turned on, the following actions are performed:

 * The flash caused by navigation is eliminated
 * The scroll position is persisted when moving from page to page
 * Element focus is persisted between navigations
 * Only the last page state in the browser's history is retained 

According to the Microsoft® .NET Framework Class Library documentation, smart 
navigation is best used only with ASP.NET pages that require frequent postbacks 
but have visual content that does not change dramatically on return.

There are numerous reports about smart navigation being restrictive and 
downright [http://weblogs.asp.net/ksamaschke/archive/2003/04/27/6085.aspx 
buggy]. Microsoft acknowledges that "smart navigation is a feature that must be 
tested in every particular scenario to be sure the proper behavior is 
exhibited."

Nevertheless, the last bullet in the above feature list is very interesting 
because it shows a different approach to a dreaded problem of web applications 
known as "Back button issue".

== Controlling browser session history: ASP.NET way ==

Smart navigation feature of ASP.NET framework prevents each ''postback'' from 
being saved in the browser history. Normally, every postback to an ASP.NET page 
causes an entry to be created in the browser's history. This defeats the 
purpose of the browser's back button because instead of going back to the 
previous '''page''', users are taken to the previous '''state''' of the current 
page. Smart navigation prevents this from happening by saving only the latest 
state of the current page in the browser's history.

This approach solves issues with Back button because it eliminates the very 
possibility to navigate to a stale page. At the same time, it allows to manage 
application state on client, offloading this task from the server session 
object. This is a brilliant idea, at least for pre-Ajax era.

== Controlling browser session history: Struts way ==

Struts framework cannot target Internet Explorer 5.5 or higher as the only 
platform, therefore a hack like SmartNavigation cannot be considered a viable 
solution. But let this not get you down, there are other solutions that work 
equally well or better, and do not depend on particular browser vendor. Among 
these solutions are:

 * [:StrutsWebIslands: Struts web islands] -- an logical improvement to a 
well-known Redirect-After-Post pattern. Works in most browsers including 
ancient ones, does not require Javascript.
 * [:StrutsManualActionWebComponent: Struts web components] -- a 
component-based solution, does not require Javascript but uses it if available. 
Without Javascript incurs full page reload similar to StrutsWebIslands 
approach. With Javascript enabled a portion of a page is updated in-place, 
which is faster and does not cause growth of browser session history.

Reply via email to