繁体   English   中英

在Play Java中编写动作

[英]Composing Action in Play Java

我知道在Stackoverflow中我们有相同类型的问题,但是据我所知,这些都是用Scala编写的。 官方文档中 ,您可以了解如何编写 Action。 其实我不清楚,但是

public class VerboseAction extends play.mvc.Action.Simple {
public CompletionStage<Result> call(Http.Context ctx) {
    Logger.info("Calling action for {}", ctx);
    return delegate.call(ctx);
}

上面的代码与下面的代码相同吗?

@With(VerboseAction.class)

public Result verboseIndex() {
    return ok("It works!"); }

他们写道,我们必须委托给包装好的Action,但是在上面的代码中,哪个Action被调用了? delegate.call(ctx)是什么意思? 我知道玩的是行动的一个实例Action ,但返回值实际上是CompletionStage<Result> ,没有Action
所以,我很困惑。 也许我有一点误会,所以有人可以指出吗?

谢谢。

Action是提供Result的工作单元(最后)。 您的第一个代码块构造一个Action ,它将执行log语句,然后返回对delegate的调用,该delegate将是要执行的下一个Action单元(另一个注释或控制器方法),并通过上下文传递该delegate一直以来

你的问题的最后一部分的误解是调用的返回类型是不是下一个Action来承担。 这是所有Action的(最终) Result

我将尝试逐个问题地回答:

上面的代码与下面的代码相同吗?

不,它实际上是用“ with”注释组成这两个动作。

但是在上面的代码中,哪个动作被调用?

动作是处理对收到的请求的响应的过程。 每当收到对此方法的请求时(此请求将映射到路由文件中的方法),将调用此操作。

他们写道,我们必须委托给包装好的Action,委托.call(ctx)是什么意思?

代表是:

/**
 * The wrapped action.
 */
"public Action<?> delegate;" 

呼叫是:

/**
 * Executes this action with the given HTTP context and returns the result.
 */
"public abstract Promise<Result> call(Context ctx) throws Throwable"

在动作课上。 因此,委托.call意味着将参数包装在动作中并返回结果。

我知道Play的Action是Action的一个实例,但是返回值实际上是CompletionStage,而不是Action。

CompletionStage实际上是:“公共接口CompletionStage”,其文档对此进行了描述:

可能异步计算的阶段,当另一个CompletionStage完成时,该阶段执行操作或计算值。 一个阶段在其计算终止时完成,但是这又可能触发其他相关阶段。 此接口中定义的功能仅采用几种基本形式,这些形式扩展为一大套方法,以捕获各种使用样式:

阶段执行的计算可以表示为Function,Consumer或Runnable(分别使用名称包括applyacceptrun的方法 ),具体取决于它是否需要参数和/或产生结果。 例如,{@ code stage.thenApply(x-> square(x))。thenAccept(x-> System.out.print(x))。thenRun(()-> System.out.println())}。 附加形式( compose )应用阶段本身的功能,而不是其结果。

这个

“一个可能异步计算的阶段,当另一个CompletionStage完成时,该阶段执行一个动作或计算一个值。”

“由阶段执行的计算可以表示为功能,使用者或可运行”

清除执行某些计算的是函数,使用者或Runnable。 您实际上是在编写动作并返回

return ok("It works!");

不是CompletionStage。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM