2013-02-03 29 views
0

我已经创建了一个名为InterceptionLogger.javaController,它将只包含Interception方法。另一个ControllerApplication将包含所有action方法并使用Interception使用@With注释。使用一个单独的控制器进行截取

这是Application.java控制器:

@With(InterceptionLogger.class) 
public class Application extends Controller { 

public static void index() { 
    System.out.println("Inside index!!!"); 
    render(); 
} 

public static void welcome(String txtName){  
    render(txtName); 
} 

如果InterceptionLogger.java控制器是这样的:

public class InterceptionLogger extends Controller { 

@Before 
static void logBefore(){ 
    System.out.println("Inside \"logBefore\" method of App Controller"); 
} 

@After 
static void logAfter(){ 
    System.out.println("Inside \"logAfter\" method of App Controller"); 
} 

} 

当我运行应用程序时,输出是:

Inside "logBefore" method of App Controller 
Inside index!!! 
Inside "logAfter" method of App Controller 

好,如预期。

但如果我改变InterceptionLogger.java这样:

public class InterceptionLogger extends Controller { 

@Before(only="welcome") 
static void logBefore(){ 
    System.out.println("Inside \"logBefore\" method of App Controller"); 
} 

@After(only="index") 
static void logAfter(){ 
    System.out.println("Inside \"logAfter\" method of App Controller"); 
} 

} 

然后我得到这个输出index

Inside index!!! 

在这种情况下,为什么没有得到打印的声明Inside "logAfter" method of App Controller在控制台中?

如何使它工作?

回答

2

玩!正在寻找当前控制器中的拦截方法。如果该方法位于另一个控制器中,则需要提供完整路径:

@Before(only="Application.welcome") 
static void logBefore(){ 
    System.out.println("Inside \"logBefore\" method of App Controller"); 
} 

@After(only="Application.index") 
static void logAfter(){ 
    System.out.println("Inside \"logAfter\" method of App Controller"); 
} 
相关问题