Hello Gabriel,

yes, I indeed took that into consideration, but if i am not wrong, there are two drawbacks:

1: When I create my own base class, and would like to use the prepare-method for something else, too, I need to overwrite the old method and mustn't forget to call super.prepare() in my implementation. IMO, this is a likely source of bugs.

2: I would have had to mess with the defaultStack anyway, since prepare is located before some other important interceptors (e.g. i18n) so I would have lost this functionality by taking an "early shortcut".

The Interceptor was done in 10mins and as far as i could test it, it seems to work fine.

public class SubmitInterceptor implements Interceptor
{
        public static final String INPUT = "input";

        public void destroy() {}
        public void init() {}


        private String paramNames;
        
        public void setParamNames( String paramNames )
        {
                this.paramNames = paramNames;
        }       
        

        public String intercept( ActionInvocation ai ) throws Exception
        {
                Map params = ai.getInvocationContext().getParameters();

                String[] paramNames = this.paramNames.split( "," );
                
                for( String param : paramNames )
                {
                        if( params.get( param.trim() ) != null )
                                return ai.invoke();
                }
                
                return INPUT;
        }
}

I created a new interceptor stack for my webapp that is like defaultStack, but with the SubmitInterceptor inserted right before conversionError:

<interceptor-ref name="submit">
        <param name="paramNames">submit</param>
</interceptor-ref>

As for the view, i am currently setting the "submit" parameter (as configured to be looked for above) for the Button:

<s:submit name="submit" label="OK" value="true" type="button" />

Comments and suggestions are welcome :-)

~Andreas



Gabriel Belingueres schrieb:
You can also opt for sharing the prepare() code through inheritance,
meaning that you create a superclass action holding the prepare()
code, instead of coding a custom interceptor.

2008/7/11 Andreas Mähler <[EMAIL PROTECTED]>:
Thanks for your Answer, Lukasz.

I already know the PrepareInterceptor and it can be used for what I would
like to do. But I consider a special interceptor more convinient, since I
intend to use it for more than one pair of view and action. (Using
PrepareInterceptor would imply the need to add the code to every single
action.)


---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to