Playframework 重头戏2-调用b/w 2控制器方法不调用操作
我正在使用Play2.2.3版本。我有两个控制器,当我试图从一个控制器调用一个方法(使用动作合成)到另一个控制器时,没有调用动作类 Controller1.javaPlayframework 重头戏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”); 结果=
@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”)。因此在本用例中不会评估授权。正如我提到的,这是一个用例。