Ohh, I kind of like that @ContentType idea. It could be implemented as
easily as the @HttpCache but I wonder if the idea panned out it might be
better to have something like @HttpHeader that handled both? I don't
want there to be so many annotations I end up with something like this:
@ContentType
@HttpCache
@HandlesEvent
@DontValidate
public Resolution....
That is over doing it a bit. :)
Gregg
Simon wrote:
> Thanks Tim (and Greg) - good to know at least that I'm not missing
> something obvious in how I'm doing things.
>
> Tim - I do like the idea of the @HandlesErrors annotation, and the
> AjaxErrorInterceptor I think will be an improvement over what I'm
> currently doing. A couple of further thoughts:
>
> It strikes me that the common theme here is the content type. It
> never makes sense to send back HTML to a client expecting JSON and
> vice-versa. I wonder therefore if there would be any value in making
> the content type a first class construct, and then it would be
> possible to specify the handling on the basis of the content types.
> Eg:
>
> @ContentType('text/x-json') public Resolution save() { ... }
>
> @HandlesErrors(contentType='text/x-json') public renderJSONError(...) {
> ... }
>
> The content type annotation, if present, might automatically set the
> right header as well, saving you from specifying it in your resolution
> (which is just icing really). The main reason I'd find this useful is
> that then I don't need to explicitly maintain the list of events
> targeted by the error handler - it will handle anything of
> content-type JSON. That in turn means I can move it to a base class
> and all I need to do is declare content type on my child class methods
> and everything works seamlessly. It's nice in a way also that
> declaring the content type becomes useful as documentation too.
>
> Just thoughts - I'd be happy to pitch and help implement something
> like this if you think it's a good direction.
>
> Thanks & cheers,
>
> Simon.
>
> On Tue, May 6, 2008 at 8:37 AM, Tim Fennell <[EMAIL PROTECTED]> wrote:
>
>> I've been thinking about the different error handling for different
>> methods for a while, but we haven't implemented anything for 1.5.
>> Essentially I think I'd like to go to a model where you can decorate
>> any method on the class with something like:
>> @HandlesErrors public fallback() { ... }
>> @HandlesErrors(on="save") handleSaveErrors() { ... }
>> etc.
>>
>> That, I believe would solve your cleanliness issue with
>> ValidationErrorHandler - note that this is more or less the last "add
>> a method" interface in Stripes, and it does feel out of place.
>>
>> As for your catching exceptions problem, I believe I can suggest a
>> decent solution, which might also generalize nicely for your first
>> problem. Let's assume that you use some kind of toolkit or at least
>> common set of JS functions on the client, and that you wouldn't mind
>> modifying or wrapping it to insert a "special" request parameter so
>> that any server-side code can know that any Ajax event is being called
>> (possibly as simply as adding _ajax=true to ajax requests).
>>
>> Then you could write an Interceptor that looked something like this:
>> @Intercepts(BindingAndValidation, CustomValidation, EventHandling)
>> AjaxErrorInterceptor implements Interceptor {
>> Resolution intercept(ExecutionContext ctx) throws Exception {
>> boolean ajax = ctx.getActionBeanContext().getRequest()....;
>>
>> try {
>> ctx.proceed();
>> if (ajax && !
>> ctx.getActionBeanContext().getValidationErrors().isEmpty()) {
>> // jsonify error messages and
>> // return new resolution
>> }
>> }
>> catch (Exception e) {
>> if (ajax) format exception for ajax and return new
>> resolution
>> else throw e;
>> }
>> }
>> }
>>
>> The only downside is that from the bean programmer's perspective this
>> would be a bit like magic. But it'd be your magic, so maybe that's ok?
>>
>> -t
>>
>>
>>
>> On May 5, 2008, at 6:24 PM, Gregg Bolinger wrote:
>>
>> > I feel you Simon. Stripes doesn't really do anything special when it
>> > comes to ajax. As far as stripes is concerned, a request is just a
>> > request and you have to decide what the response is supposed to look
>> > like and I'd suspect that most of us format our response a bit
>> > differently, even if it is HTML or JSON. So I'd be hard pressed to
>> > find
>> > a Stripes solve all type of solution.
>> >
>> > I'll be interested in seeing what the rest of the community might come
>> > up with.
>> >
>> > Gregg
>> >
>> >
>> > Simon wrote:
>> >> Hello all,
>> >>
>> >> I have a common problem that I'd like to be able to solve more
>> >> cleanly
>> >> than I do. I often have action beans that expose a piece of logic
>> >> to
>> >> several different types of callers. For example they may support the
>> >> same call via AJAX to which they return JSON, and as a regular web
>> >> request, to which they return HTML. Typically I will set up a
>> >> different method on the action bean to handle each case and they will
>> >> both call some shared internal logic to do the operation but return
>> >> different resolutions with the results.
>> >>
>> >> This is easily done except for two things:
>> >>
>> >> - how to handle errors in validation of input parameters
>> >> - how to handle general errors in the execution of my action bean.
>> >>
>> >> In both cases I want my JSON methods to return JSON formatted errors
>> >> and my HTML methods to return HTML pages displaying errors. The
>> >> default behavior of Stripes is that my JSON methods all return HTML
>> >> errors which, of course, horribly breaks the parser at the other end.
>> >>
>> >> For the validation case I tried implementing ValidationErrorHandler
>> >> on
>> >> my action bean. However this has to be done on a whole-bean basis
>> >> - I
>> >> then have to put inside there some kind of switch logic that
>> >> differentiates the HTML cases from the JSON cases. This feels very
>> >> unclean. For the general error handler the only solution I've found
>> >> is to wrap every method call with an appropriate try / catch block
>> >> explicitly and return the appropriate content back from it.
>> >>
>> >> None of this is very hard, but it has a real "square peg in round
>> >> hole" feel to it. Does anybody know of cleaner solutions to handle
>> >> this kind of problem? Will Stripes 1.5 offer anything new to help?
>> >>
>> >> Thanks for any suggestions!
>> >>
>> >> Simon.
>> >>
>> >> -------------------------------------------------------------------------
>> >> This SF.net email is sponsored by the 2008 JavaOne(SM) Conference
>> >> Don't miss this year's exciting event. There's still time to save
>> >> $100.
>> >> Use priority code J8TL2D2.
>> >>
>> http://ad.doubleclick.net/clk;198757673;13503038;p?http://java.sun.com/javaone
>> >> _______________________________________________
>> >> Stripes-users mailing list
>> >> [email protected]
>> >> https://lists.sourceforge.net/lists/listinfo/stripes-users
>> >>
>> >
>> >
>> > -------------------------------------------------------------------------
>> > This SF.net email is sponsored by the 2008 JavaOne(SM) Conference
>> > Don't miss this year's exciting event. There's still time to save
>> > $100.
>> > Use priority code J8TL2D2.
>> >
>> http://ad.doubleclick.net/clk;198757673;13503038;p?http://java.sun.com/javaone
>> > _______________________________________________
>> > Stripes-users mailing list
>> > [email protected]
>> > https://lists.sourceforge.net/lists/listinfo/stripes-users
>>
>>
>> -------------------------------------------------------------------------
>> This SF.net email is sponsored by the 2008 JavaOne(SM) Conference
>> Don't miss this year's exciting event. There's still time to save $100.
>> Use priority code J8TL2D2.
>>
>> http://ad.doubleclick.net/clk;198757673;13503038;p?http://java.sun.com/javaone
>> _______________________________________________
>> Stripes-users mailing list
>> [email protected]
>> https://lists.sourceforge.net/lists/listinfo/stripes-users
>>
>>
>
> -------------------------------------------------------------------------
> This SF.net email is sponsored by the 2008 JavaOne(SM) Conference
> Don't miss this year's exciting event. There's still time to save $100.
> Use priority code J8TL2D2.
> http://ad.doubleclick.net/clk;198757673;13503038;p?http://java.sun.com/javaone
> _______________________________________________
> Stripes-users mailing list
> [email protected]
> https://lists.sourceforge.net/lists/listinfo/stripes-users
>
-------------------------------------------------------------------------
This SF.net email is sponsored by the 2008 JavaOne(SM) Conference
Don't miss this year's exciting event. There's still time to save $100.
Use priority code J8TL2D2.
http://ad.doubleclick.net/clk;198757673;13503038;p?http://java.sun.com/javaone
_______________________________________________
Stripes-users mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/stripes-users