| When writing components for deployment in web
applications you need to think about the sequence in which the user does
things in the web browser. For example the user can spawn new instances
of browser windows from a hyperlink in your application continue
processing, close down the browser window and attempt to continue in the
old window.
This can cause some problems for simple stateless applications but is
an even bigger problem for stateful/legacy converted applications. Think
of the scenario where a user deletes a row of data which is stored in
the component, then hits the back button a few times and continues to
work on the row they just deleted. The user could also spawn a new
windows makes a few edits then save their work, closes the window and
elects to save the old work in the old window, overwriting their new
work.
My first thoughts on this subject where to remove the browser
features that allowed the user to do this, so I opened up my own frame
with no browser controls, disabled the right mouse button and other
tricks. However this soon became a nightmare with different versions of
browsers requiring different code and various other problems, so I
sought a different and more user friendly solution.
I came up with the idea of sequencing the web pages, when each page
is create on the server a hidden field is sent to the client containing
the next sequence number from the browser. Whenever a form is received
from a client this sequence number is checked to see if it is equal to
the last number sent to the client. If the number does not match, then
user is told about the probable causes of the problem and the component
is recycled and the user starts again. The user soon learns not to use
the back button during processing.
One last point is to make sure you have good navigational links to
remove the need for the user to use the back button in the first place.
|