okay, to answer my own question, yes, if you configure everything correctly,
then you can get a customized stack to work for all Actions. the only thing
you really need to do is add this line to struts.xml

<constant name="struts.convention.default.parent.package" value="default"/>

with this defined, you can remove the @ParentPackage and @InterceptorRef
from the classes and methods.

wow, it was that easy.

On Sat, Jan 30, 2010 at 6:14 PM, Jake Vang <vangj...@googlemail.com> wrote:

> okay, after fiddling around for 2 hours, with the weak documentation out
> there, i think i have it figured out. at least empirically, it works now.
> just in case there are other users out there who are running into this
> problem, let me explain what in the world i did. i know A LOT of other
> people have run into this problem on how to get interceptors to work with
> the convention plugin (googling). the shame is that although i saw a lot of
> "thanks, i got it working", no one ever bothered to show how they got it to
> work.
>
> at any rate, if you read the original post by me, you will see how my
> interceptor stack was defined in struts.xml. you will also see how i
> implemented a dummy interceptor. i had to do two things to get my
> interceptor working (called on my action).
> 1. add @ParentPackage("default") to my Action class
> 2. add @interceptorref...@interceptorref("dummyStack") to my execute method
> (in my Action class).
>
> after i did this, my interceptor's intercept(ActionInvocation) method is
> called when my Action is called.
>
> here's how my dummy Action class looks like.
>
> @ParentPackage("default")
> public class DummyAction extends ActionSupport {
>  @Action(value="/dummy",
>   result...@result(name="success",location="dummy-success.jsp")},
>   interceptorref...@interceptorref("dummyStack")}
>  )
>  public String execute() {
>   return SUCCESS;
>  }
> }
>
> alright, so, now i'd like to know how to get this interceptor stack
> (dummyStack) to work on all actions? in the link i posted, you can do so
> using one single line in struts.xml (i.e. <default-interceptor-ref
> name="dummyStack"/>). with the convention plugin + annotations, is such a
> simple approach possible? or do i have to continuously add @ParentPackage
> and @InterceptorRef annotations to the classes and methods i want to use the
> stack?
>
> i don't know why this is such a pain (but then again, i'm not a developer
> on the struts2 project, so there may be a lot of complexities to get this
> working elegantly that i'm unaware of).
>
> On Sat, Jan 30, 2010 at 4:10 PM, Jake Vang <vangj...@googlemail.com>wrote:
>
>> i have written an interceptor implementation, however, it seems i cannot
>> get it to work. i have followed the instructions at
>> http://struts.apache.org/2.x/docs/interceptors.html. i have also followed
>> the instructions at
>> http://struts.apache.org/2.x/docs/how-do-we-configure-an-interceptor-to-be-used-with-every-action.htmlto
>>  use the interceptor with every action.
>>
>> however, when any of my actions run, i never see the pre and post
>> processing logging messages (logging messages inside the intercept method).
>> i do see the logging messages from the init and destroy methods. this is not
>> a problem with logging (as for sanity checking, i also use
>> System.out.println, and have Tomcat running in console mode). i also have
>> placed some break points in the intercept(ActionInvocation) method, but
>> these break points are never reached.
>>
>> this is my struts.xml.
>>
>> <struts>
>>     <package name="default" extends="struts-default">
>>         <interceptors>
>>             <interceptor name="dummyInterceptor"
>> class="mypackage.DummyInterceptor"/>
>>             <interceptor-stack name="dummyStack">
>>                 <interceptor-ref name="dummyInterceptor"/>
>>                 <interceptor-ref name="defaultStack"/>
>>             </interceptor-stack>
>>         </interceptors>
>>         <default-interceptor-ref name="dummyStack"/>
>>     </package>
>> </struts>
>>
>> this is my DummyInterceptor class.
>>
>> public class DummyInterceptor implements Interceptor {
>>     private static final Log _log =
>> LogFactory.getLog(DummyInterceptor.class);
>>     public void destroy() {
>>         _log.debug("dummy interceptor destroyed called");
>>         System.out.println("dummy interceptor destroyed
>> called".toUpperCase());
>>     }
>>     public void init() {
>>         _log.debug("dummy interceptor init called");
>>         System.out.println("dummy interceptor init called".toUpperCase());
>>     }
>>     public String intercept(ActionInvocation actionInvocation) throws
>> Exception {
>>         _log.debug("dummy interceptor intercept pre processing");
>>         System.out.println("dummy interceptor intercept pre
>> processing".toUpperCase());
>>
>>         String result = actionInvocation.invoke();
>>
>>         _log.debug("dummy interceptor intercept post processing");
>>         System.out.println("dummy interceptor intercept post
>> processing".toUpperCase());
>>         return result;
>>     }
>> }
>>
>> i am using annotations for my Action classes, so i do not define any
>> <action> elements in struts.xml (using the Struts2 Convention jar).
>>
>> one very interesting thing i did was to get struts-default.xml out of the
>> struts2-core-2.1.8.1.jar. i then modified struts-default.xml by adding: 1) a
>> definition of my interceptor and 2) my interceptor onto the defaultStack.
>> when i did this, my interceptor does work as expected (i see logging output
>> from the intercept method, i can hit break points set inside this method)
>> for all my actions.
>>
>> i wonder if there is some gotcha that i am missing here. is there
>> something extra that i have to do when mixing annotations with interceptors?
>>
>> thanks.
>>
>
>

Reply via email to