why not use an ajax lazy load panel for this, perhaps one that fails gracefully?
-igor On Fri, Apr 16, 2010 at 5:27 AM, Jeremy Thomerson <[email protected]> wrote: > Use case is that you may occasionally have some component on the page (say a > graph or a chart) that isn't extremely critical to the function of the page. > Maybe it has to get data from a third party, and occasionally that will fail. > And rather than aborting the whole page, you'd rather it be replaced with an > empty placeholder. > > Of course for the third-party data example, you could add error handling to > the model. But you end up with this boilerplate all over your code > potentially. So, it'd be nice to have a more global way of responding to an > error for a single component and moving on, perhaps marking components that > could "fail gracefully" with some sort of interface or annotation. > > > Jeremy Thomerson > http://www.wickettraining.com > -- sent from a wireless device > > > -----Original Message----- > From: Igor Vaynberg <[email protected]> > Sent: Friday, April 16, 2010 1:42 AM > To: [email protected] > Subject: Re: Handling errors on a per-component basis? > > what if a component throws an exception during onbeforerender? > > what if it throws an exception during a post-order traversal? > > there are a lot of dependencies, im not sure how feasible this idea > is. whats the usecase? the only one that makes sense is if an error is > thrown during model.getobject() and we want to handle it then? why not > make the model exception-aware then? or hook in directly there and > skip the component render? > > as far as "remembering" where the response is i think you can > accomplish it by swapping a different response in. like the > transformer behaviors do - which actually come pretty close to what > you want... > > -igor > > On Thu, Apr 15, 2010 at 11:27 PM, Jeremy Thomerson > <[email protected]> wrote: >> Core devs (and others), >> >> I had someone ask me how to handle errors on a per-component basis. That >> is, if a component on the page encounters an error during rendering, it >> would be nice to be able to just replace it with an empty panel that says >> "foo component encountered an error". Obviously, there are only certain >> places you would want this, but it could be valuable for certain situations. >> >> So, I have a couple ideas on how to implement it. None of them seem very >> clean. I'd like your feedback. Basically, I need to be able to >> wrap Component#renderComponent(final MarkupStream markupStream) so that I >> can catch any error coming out of there. So, the flow should be something >> like: >> >> 1. somehow cache exactly where the response is (before the component >> writes something to it) - either by copying the internal buffers, etc, or >> whatever, but not letting it go back to the client until the component is >> done being rendered >> 2. then, inside of a try / catch, I could call >> super.renderComponent(final MarkupStream markupStream) so that the >> component >> is rendered (calling Response#write to output it's stuff....) >> 3. then, if I caught an error, I rollback the response buffer to where it >> was before that component, and write my "this component didn't work" thing, >> and then close the tag and continue rendering >> >> Because most of the methods that actually do the rendering are final, and >> this is hard to accomplish. And, of course, I can't actually globally >> override a method in Component. Behaviors get calls before and after render, >> as well as on an error, but they can't stop the error from being rethrown
