我使用 Playfrawork 和 Java 创建了一个应用程序。
我在上面使用 SecureSocial 插件。 在我的 Controller 中有一种方法,其中一个过程是在 SecureSocial 中执行句柄启动重置密码。 但该方法是用 Scala 编写的。
如果我像这样在我的 Java 源代码中引用该方法:
Registration.handleStartResetPassword();
什么都没发生!如果我更改为以下行,则相同:
Registration.handleStartResetPassword().apply();
与以下源代码块相同:
play.api.libs.iteratee.Iteratee<byte[], SimpleResult> it = Registration.handleStartResetPassword().apply(ctx()._requestHeader());
Future<SimpleResult> future = it.run();
Option<Try<SimpleResult>> result = future.value();
SimpleResult res = result.get().get();
我删除了所有代码并尝试执行 Secure Social 代码但没有任何反应。 这是我的方法:
public static Result resetPassword() {
Registration.handleStartResetPassword().apply();
return TODO;
}
我的路线是这条:
POST /reset controllers.ProfileController.resetPassword
已编辑:添加了另一种我尝试运行但没有运行该方法的方法。
最佳答案
当您调用 handleStartResetPassword()
时你得到一个 Action
的实例返回,在您通过调用 Action.apply(request)
向其提供特定请求之前,它实际上不会执行任何操作。然后它将实际运行该 Controller 操作的逻辑并返回 Future<Result>
.
不完全确定您是否可以向后桥接并从中获得 Play Java 异步结果。
关于java - 在 Java Controller (PlayFramework) 中执行 Scala Action ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24623482/