2014-10-06 19 views
0

正在使用播放2.2.3版本。我有2个控制器,当我试图从一个控制器调用一个方法(包含动作组合)到另一个控制器时,动作类不被调用。播放2 - 呼叫黑白2控制器方法不会调用动作

Controller1.java @CustomAction(actionName="myAction") public static Result getData() { System.out.println("From Controller 1"); return ok("From Controller 1"); }

Controller2.java public static Result index() { System.out.println("From Controller 2"); Result result = Controller1.getData(); String s =new String(JavaResultExtractor.getBody((SimpleResult) result)); return ok(index.render(s)); }

路由 GET /view controllers.Controller2.index() GET /getData controllers.Controller1.getData()

当调用http://localhost:9000/getData,动作类被调用成功。

但是当我调用http://localhost:9000/view时,action类没有被调用。

我不确定什么是从另一个控制器调用控制器方法的正确方法。 任何帮助,这将是非常有益的。

在此先感谢

回答

0

通过调用Controller1.getData()直接您绕过通过游戏完成的任何请求处理。即您只是在Play代码的上下文之外调用Java类的静态方法。

目前还不清楚是什么你最终想从您的示例代码来完成,所以只能提醒您:

  • 如果适用
  • 带出常见的功能添加@CustomActionController2.index()到另一个类让两个控制器调用这个类(不应该返回Result
  • 或者,如果适用,从Controller2.index()重定向到Controller1.getData()(如:return redirect(routes.Controller1.getData());
+0

谢谢你的回复Donovan。正如你所说的,我将简要介绍一下用例,以便让我清楚问题陈述。 – user3776440 2014-10-06 14:08:29

+0

用例之一。 - 假设我有一个像'@Restrict(@Group(“admin”))''Controller1''的getData'方法的授权注释,那么如果我从Controller2调用'getData'方法,条件将不会被评估。希望用例清楚。 – user3776440 2014-10-06 14:19:26

+0

是否有任何理由不能将'@Restrict(@Group(“admin”))''添加到'Controller2.index()'中? – 2014-10-06 14:30:53