使用单独的控制器进行拦截

时间:2013-02-03 06:08:35

标签: java playframework playframework-1.x

我创建了一个名为Controller的{​​{1}},它只包含InterceptionLogger.java个方法。另一个InterceptionController将包含所有Application方法,并使用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!!! 没有在控制台中打印出来?

如何让它发挥作用?

1 个答案:

答案 0 :(得分: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");
}