To understand the back browser problem in the web world, Duncan Mills and Peter Koletzke's recent Oracle JDeveloper 10g for Forms and PL/SQL Developers text (I recommend this book for beginner JDev ADF Faces programmers) sums this issue up well:
"Users may be accustomed to clicking the browser's Back button to return to the preceding page or the Refresh button to reload the page. This can cause problems with web applications that use a Controller layer, like the JSF controller or Struts, because the browser Back button returns to the preceding page in the browser's page history without calling code in the Controller layer. The controller will therefore, not know the state of the application's data and the preceding page will either not load properly or may place the application into an inconsistent or unstable state. The same problem occurs with the browser's Refresh button, which just reloads the same page, again without calling Controller layer code. This is a problem in all web applications, not only those using J2EE technology or ADF libraries."
I like this simple summary, because a more complex discussion involves stateful web applications, web controllers and conspiracies about J.F. Kennedy. In other words, too much detail to go into in a blog, and besides I've a baby girl to look after.
Anyhow, I mentioned that in ADF the JBO-35007 error is in fact a powerful feature for capturing the inappropriate usage of the browser back button by the user. (How powerful? Well, go code it yourself and find out how difficult it would be to implement)
There is mention of this feature in the following JDev doco page.It's really quiet easy to replicate this feature (and error) in action, and useful to do so to learn when this feature shows its warty little head.
1. First create a JSF web page with an ADF Faces table bound to your favourite VO. Include the table selection control, as well as a submit button.
3. In your faces-config.xml file create a navigation rule from page 1 to page 2.
4. In the first web page change the submit command button action attribute to the new navigation rule
5. Run your app from the table page.
6. Select any record, then the submit button which will navigate to the 2nd page.
7. On the 2nd page, press the browser back button.
8. The browser has returned to a local cached copy of the 1st page. Select any other record, and press the submit button again.
9. JBO-35007 will be raised.
To get around this issue, on the 2nd page we should provide a command button to navigate back to page 1, and discourage the user from using the browser back button.
And as can be seen from the JDev doco note, the row currency token mechanism can be turned off per page through the pageDef for your page, setting the EnableTokenValidation to false. (Be warned you should not flippantly turn this off for pages, or blanket turn it off for all pages, as the mechanism is an important one)