真的很奇怪 GWT RPC 行为 + 显示

Posted

技术标签:

【中文标题】真的很奇怪 GWT RPC 行为 + 显示【英文标题】:Really strange GWT RPC behavior + display 【发布时间】:2010-07-01 20:06:09 【问题描述】:

所以本质上,这个项目构建了一个来自各种测试类型的测试结果的门户。结果的获取和显示很好;但是,生成的表格没有以正确的顺序显示。它们的显示顺序是随机的,但它明确指定了 RPC 调用的调度顺序,我什至在我的面板中实现了一个索引系统以进一步提供帮助。

基本上,该应用程序由包含在一个垂直面板中的三个水平面板组成。

进一步解释:新、中、旧指的是被测软件产品的三个版本。 TestTable 只是一个自定义的 FlexTable,每个 xxxPanel 都是 Horizo​​ntalPanel。在 onModuleLoad() 方法之外,索引全部初始化为零。每个面板都有自己的服务,负责调度 RPC 调用以填充相应的面板。

public void onSuccess(List<TestResult> result) 

TestTable testTable1 = new TestTable(result);

if(result.get(0).getVrmf().equals(newestVersion))
 newPanels.insert(testTable1, newIndex + 1); //insert adds element BEFORE specified index, so +1
 newPanels.addStyleName("horizontalPanelStyle");
 newIndex++;


if(result.get(0).getVrmf().equals(middleVersion))
 midPanels.insert(testTable1, midIndex + 1); //insert adds element BEFORE specified index, so +1
 midPanels.addStyleName("horizontalPanelStyle");
 midIndex++;


if(result.get(0).getVrmf().equals(oldVersion))
 oldPanels.insert(testTable1, oldIndex + 1); //insert adds element BEFORE specified index, so +1
 oldPanels.addStyleName("horizontalPanelStyle");
 oldIndex++;

;

以下是我的呼叫分配方式:if(testPortalSvcNew != null) testPortalSvcNew.getTestResults(5, newestVersion, TestType.SMOKE, callback); testPortalSvcNew.getTestResults(5, newestVersion, TestType.BVTUNIX, callback); testPortalSvcNew.getTestResults(5, newestVersion, TestType.BVTWINDOWS, callback);

每次刷新都会生成不同的测试类型水平显示顺序。版本被正确分组并垂直分开,但它们的水平顺序很混乱。我被难住了!

【问题讨论】:

【参考方案1】:

所以您希望测试按 SMOKE、BVTUNIX 和 BVTWINDOWS 的顺序返回?

如果是这样,您将需要链接异步调用或将它们分组到一个 ajax 调用中,然后一次返回所有这些调用。异步调用就是这样。不保证退货。

【讨论】:

刚刚与一位熟悉 GWT 的同事交谈,他证实了我的恐惧,就像你一样。我将向服务传递一组 TestTypes 并以这种方式处理它。谢谢!如果我有声望,我会 +1 你 :-/ 我对这一切都不熟悉 :-)【参考方案2】:

您可以尝试为每个面板创建一个新的TestTable 实例。现在您正在向所有三个面板添加相同的实例。我不确定这是否有帮助,但这有时可能会导致 GWT 出现奇怪的行为,因此值得一试。

不过,我同意 @j flemm 的观点,即您永远无法确定异步服务的执行顺序。

【讨论】:

以上是关于真的很奇怪 GWT RPC 行为 + 显示的主要内容,如果未能解决你的问题,请参考以下文章

是否可以为每个 GWT RPC 调用无缝显示一个 ajax 微调器?

gwt-rpc vs rest ......真的是其中之一吗?

GWT RPC 调用在 30 秒后重复

Gwt-rpc 仅使用 DAO。摆脱 DTO

如何使用 GWT 将许多数据从数据存储区显示到网站

如何使用 HttpClient 发送 GWT-RPC 请求?