Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/329.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用单独的控制器进行拦截_Java_Playframework_Playframework 1.x - Fatal编程技术网

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

Java 使用单独的控制器进行拦截,java,playframework,playframework-1.x,Java,Playframework,Playframework 1.x,我已经创建了一个名为InterceptionLogger.java的Controller,它将只包含Interception方法。另一个控制器即应用程序将包含所有操作方法,并使用截取,使用带有注释的 这是应用程序.java控制器: @With(InterceptionLogger.class) public class Application extends Controller { public static void index() { System.out.println("In

我已经创建了一个名为
InterceptionLogger.java
Controller
,它将只包含
Interception
方法。另一个
控制器
应用程序
将包含所有
操作
方法,并使用
截取
,使用带有注释的

这是
应用程序.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);
}
@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");
}
如果
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");
}

}
然后我得到
索引的输出:

Inside index!!!
在这种情况下,为什么App Controller的“logAfter”方法中的语句
没有在控制台中打印出来


如何让它工作?

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

@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);
}
@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");
}