it does not seems to be 'transactions-aware'. I mean if somebody will request very fast 2 pages, where 1st returning a error, then both of the pages will display same error. may be I am wrong, but it seems to be so.
personally I prefer to drive template from a script in this case, passing variables directly to template. its possible in php, webware, and Zope. Last year I am working with Zope, here is example in script:
errors.append('Please enter your username')
errors.append('Please enter your password')
so, in the page template I loop over the error list same way as described in the Ian example above.
its also more secure, since 3rd party do not see any particular data into URL GET requests, so both Session, and this example should be good.