2014-10-06 48 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