GWT 异步生成,在某些情况下关闭?

Posted

技术标签:

【中文标题】GWT 异步生成,在某些情况下关闭?【英文标题】:GWT Async generation, turn off in some cases? 【发布时间】:2016-03-30 22:54:44 【问题描述】:

当使用 gwt-maven-plugin 的 generateAsync 时,是否可以对单个 gwt-rpc 服务应用注解(或其他东西),以便相应的异步不会自动生成并且可以手动编写?


或者,是否有注释(或其他东西)使生成的异步具有“请求”返回类型?

【问题讨论】:

【参考方案1】:

从 gwt-maven-plugin 的文档中,您需要调整 servicePattern 配置属性,或者您可以要求它始终生成返回 Request 的方法。

或者,更好的是,不要使用这个目标!

(或者只偶尔手动调用一次并将生成的类复制到您的源)

【讨论】:

澄清一下,我实际上并没有称之为目标,Eclipse 集成看到它并生成源代码。所以我犹豫着指指点点。在过去的几年里,我们没有这个目标,偶尔我会重新审视它,看看我们是否可以利用自动生成,或者仍然坚持手动进行。 我将进一步研究该服务模式部分......实际上......也许可以只设置 returnRequest......这在重新访问文档后似乎更加明显。 如果不是由您的 Maven 构建运行,Eclipse 将不会运行它;如果您不想使用它,请将其从 POM 中删除。 所以,再说一遍,过去几年我们的 pom 中没有“generateAsync”目标。但是,最好打开它以避免额外的样板。问题是 maven 插件是一种全有或全无的方法,它将生成所有异步或不生成任何异步(它不在乎您是否已经手动定义了它们)。 插件的默认行为是生成所有返回类型为 void 的异步。但是,我希望有一种方法可以让它对请求返回类型进行一些处理,而对一些没有(基于注释或其他内容)进行处理。无论如何,解决方案是为所有生成的异步打开“请求”的返回类型,并接受它。【参考方案2】:

如果已经存在同名的类,GWT 生成器将永远不会创建该类。这意味着您可以要求 GWT 编译和生成代码,然后将类复制到您的源中并自定义它们,以后编译器运行将不会尝试生成源。

这可能有其他副作用 - 如果代理、类型序列化器或字段序列化器被阻止生成,那么 RPC 生成器可能会假设其他依赖项也都已正确生成,所以如果你不这样做,你可能会发现自己缺少类'不要也复制那些其他类。同样,当然,任何需要修改或重建序列化程序的更改都必须手动完成,例如更改可序列化类型或修改 RPC 方法。


您的异步接口始终可以声明返回类型为 RequestRequestBuilder 而不是 void。如果声明RequestBuilder,则请求不会自动发送,必须调用send(),而返回Request则表示请求已发送。

【讨论】:

有没有办法让自动生成的使用请求/请求构建器? 另外,我肯定会看到类在它们已经存在时生成,但我认为这是因为 gwt-maven-plugin 没有那么敏锐。 “有没有办法……?”是的,只需让您的异步方法返回 Request 或 RequestBuilder 而不是 void。 maven 中生成的类应该在target/.generated/... 中,尽管您可能需要打开一个标志以强制它们显示在磁盘上(有两个 gwt-maven-plugins,我看不出您使用的是哪个)。 我目前有手写的异步方法,返回请求值,所以是的,我知道该怎么做。是的,我确实看到了生成的,这不是问题。 (我们使用这个插件我相信:gwt-maven-plugin.github.io/gwt-maven-plugin)。 如果您有更多细节,请更新您的问题 - cmets 不是讨论的地方。

以上是关于GWT 异步生成,在某些情况下关闭?的主要内容,如果未能解决你的问题,请参考以下文章

拦截 GWT RPC 的异步代理服务异常

GWT 的各种异步设施

有啥方法可以在不关闭其 BaseStream 的情况下关闭 StreamWriter?

如何在不离开当前视图的情况下关闭 modalViewController?

GWT 单线程异步回调

如何在没有收到“您要关闭此窗口”提示的情况下关闭浏览器窗口?