Playframework 重头戏2-调用b/w 2控制器方法不调用操作

Playframework 重头戏2-调用b/w 2控制器方法不调用操作,playframework,playframework-2.0,Playframework,Playframework 2.0,我正在使用Play2.2.3版本。我有两个控制器,当我试图从一个控制器调用一个方法(使用动作合成)到另一个控制器时,没有调用动作类 Controller1.java @CustomAction(actionName=“myAction”) 公共静态结果getData() { System.out.println(“来自控制器1”); 返回正常(“控制器1”); } Controller2.java 公共静态结果索引() { System.out.println(“来自控制器2”); 结果=

我正在使用Play2.2.3版本。我有两个控制器,当我试图从一个控制器调用一个方法(使用动作合成)到另一个控制器时,没有调用动作类

Controller1.java

@CustomAction(actionName=“myAction”)
公共静态结果getData()
{
System.out.println(“来自控制器1”);
返回正常(“控制器1”);
}

Controller2.java

公共静态结果索引()
{
System.out.println(“来自控制器2”);
结果=Controller1.getData();
字符串s=新字符串(javaResultTextRactor.getBody((SimpleResult)结果));
返回ok(index.render(s));
}

路线

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

当我调用
http://localhost:9000/getData
,正在成功调用操作类

但是当我调用
http://localhost:9000/view
,未调用操作类

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


通过直接调用Controller1.getData(),您可以绕过Play完成的任何请求处理。也就是说,您只是在一个Java类上调用一个静态方法,不在播放代码的上下文中

不清楚您最终要从示例代码中实现什么,因此只能建议您:

  • @CustomAction
    添加到
    Controller2.index()
    中(如果适用)
  • 将公共功能剥离到另一个类中,并让两个控制器调用该类(不应返回
    结果
  • 或者,如果适用,从
    Controller2.index()
    重定向到
    Controller1.getData()
    (例如:
    返回重定向(routes.Controller1.getData());

感谢您的回复,多诺万。正如你所说的,我将简要介绍这个用例,这样问题陈述就可以让我清楚了假设我在
Controller1
getData
方法上有一个类似
@Restrict(@Group(“admin”)
的授权注释,那么如果我从Controller2调用
getData
方法,则不会评估该条件。希望我对这个用例很清楚。有什么原因不能将
@Restrict(@Group(“admin”))
添加到
Controller2.index()
中吗?好的,多诺万。我也可以在Controller2上设置
@Restrict(@Group(“admin”))
,但角色不同,比如
@Restrict(@Group(“role3”))
。i、 e.“getData”具有
@Restrict(@Group(“admin”))
index
具有@Restrict(@Group(“role3”)。因此在本用例中不会评估授权。正如我提到的,这是一个用例。