2010-10-11 13 views
2

Je suis en train d'implémenter quelques trucs dans mon application basée sur Struts en utilisant des intercepteurs, et je ne comprends plus comment fonctionne leur cycle de vie. Selon les Struts docs ("Interceptors", "Writing interceptors" et "Big picture"), il devrait fonctionner quelque chose comme ceci:Inside Interceptor.intercept(), comment savoir si l'action a déjà été exécutée?

 
FirstInterceptor 
    NextInterceptor 
    LastInterceptor 
     Action 
     Result 
    LastInterceptor 
    NextInterceptor 
FirstInterceptor 

ce qui est logique, mais je suis trébuchant sur la façon de distinguer un appel d'intercepteurs exécuter avant que l'action d'une exécution après le résultat est rendu (je saute PreResultListener s ici). Si je lance un débogueur, je reçois deux appels à intercept() et ne trouve rien de trop évident sur le ActionInvocation Je suis passé. (Mise à jour: Cette partie était une grande confusion sur ma fin, et j'ai pu répondre à ma question ci-dessous une fois que je l'ai eu)

Les "Big picture" page parle quelque peu confuse d'un « avant » et « après « « clause » qui sont appelés, mais je ne sais pas quoi faire de celui-ci:

[...]

Cela inclut l'invocation des intercepteurs (la clause avant) avant d'invoquer la Action elle-même.

[...]

Interceptor sont exécutés à nouveau (dans l'ordre inverse, en appelant la clause après).

[...]

(Mise à jour: Ces deux phrases sont encore mal, cependant)

Répondre

2

Il n'y a pas deux appels à l'intercepteur:

public class MyInterceptor implements Interceptor { 

    public String intercept(ActionInvocation invocation) { 
     /* 
     This is before Action.execute(), 
     and before all interceptors down the stack 
     */ 

     String code = invocation.invoke(); 

     /* 
     This is after Action.execute(), 
     the result rendering and all 
     interceptors down the stack, 
     but before the interceptors 
     higher up in the stack. 
     */ 

     return code; 
    } 

} 

(Notez que les "deux appels à intercepter" dont j'ai été témoin dans le débogueur étaient le résultat d'une redirection moins évidente que je n'ai pas remarqué. Cela m'a beaucoup perturbé.)