Ext-GWT TreeGrid 间接调用了 GWT-RPC 回调?为啥?
Posted
技术标签:
【中文标题】Ext-GWT TreeGrid 间接调用了 GWT-RPC 回调?为啥?【英文标题】:Ext-GWT TreeGrid indirectly calls a GWT-RPC callback? Why?Ext-GWT TreeGrid 间接调用了 GWT-RPC 回调?为什么? 【发布时间】:2009-07-29 19:14:24 【问题描述】:我正在使用 GWT-RPC 使用来自服务器的数据填充 Ext-GWT TreeGrids。我正在使用 4 个回调来填充 6 个 TreeGrid。由于回调 onSuccess 函数通过插入行来修改 TreeGrid,因此 TreeGridView 需要呈现行。回调类称为 MainPnlSummaryTablesAsyncCallback。
由于某种原因,当它需要通过 JSNI 确定 TreeGridView 的滚动条的 offsetHeight 时,会在堆栈跟踪中的另一个回调实例上调用 onSuccess 或 onFailure。我遇到的堆栈跟踪副本如下。
这真的很奇怪吗?为什么会这样?
仅供参考,我正在使用 Ext-GWT 2.0.1 和 GWT 1.7.0,并且我正在使用托管模式浏览器进行调试,尽管我很确定这是 Web 模式的问题。
PnlSummaryClientDebug_as10node6 [Java Application]
com.google.gwt.dev.HostedMode at localhost:3595
Thread [main] (Suspended (breakpoint at line 403 in MainPage$MainPnlSummaryTablesAsyncCallback))
MainPage$8(MainPage$MainPnlSummaryTablesAsyncCallback).onSuccess(GWTPair<AggregateStringGWTTable,AggregateStringGWTTable>) line: 403
MainPage$8(MainPage$MainPnlSummaryTablesAsyncCallback).onSuccess(Object) line: 1
RequestCallbackAdapter<T>.onResponseReceived(Request, Response) line: 215
Request.fireOnResponseReceivedImpl(RequestCallback) line: 264
Request.fireOnResponseReceivedAndCatch(GWT$UncaughtExceptionHandler, RequestCallback) line: 236
Request.fireOnResponseReceived(RequestCallback) line: 227
NativeMethodAccessorImpl.invoke0(Method, Object, Object[]) line: not available [native method] [local variables unavailable]
NativeMethodAccessorImpl.invoke(Object, Object[]) line: 39
DelegatingMethodAccessorImpl.invoke(Object, Object[]) line: 25
Method.invoke(Object, Object...) line: 597
MethodAdaptor.invoke(Object, Object...) line: 103
IDispatchImpl.callMethod(CompilingClassLoader, Object, Variant[], MethodAdaptor) line: 126
IDispatchProxy.invoke(int, int, Variant[]) line: 155
IDispatchProxy(IDispatchImpl).Invoke(int, int, int, int, int, int, int, int) line: 294
IDispatchProxy(IDispatchImpl).method6(int[]) line: 194
COMObject.callback6(int[]) line: 117
COM.VtblCall(int, int, int, GUID, int, int, DISPPARAMS, int, EXCEPINFO, int[]) line: not available [native method]
IDispatch.Invoke(int, GUID, int, int, DISPPARAMS, int, EXCEPINFO, int[]) line: 64
OleAutomation.invoke(int, int, Variant[], int[], Variant) line: 493
OleAutomation.invoke(int, Variant[]) line: 417
ModuleSpaceIE6.doInvokeOnWindow(OleAutomation, String, Variant[]) line: 68
ModuleSpaceIE6.doInvoke(String, Object, Class<?>[], Object[]) line: 153
ModuleSpaceIE6(ModuleSpace).invokeNative(String, Object, Class<?>[], Object[]) line: 453
ModuleSpaceIE6(ModuleSpace).invokeNativeInt(String, Object, Class<?>[], Object[]) line: 207
javascriptHost.invokeNativeInt(String, Object, Class<?>[], Object[]) line: 75
Element$.getOffsetHeight$(Element) line: not available
El.getHeight(boolean) line: 984
TreeGridView(BufferView).getVisibleRowCount() line: 313
TreeGridView(BufferView).doRender(List<ColumnData>, List<ModelData>, int, int, boolean, boolean) line: 189
TreeGridView(BufferView).doRender(List<ColumnData>, List<ModelData>, int, int, boolean) line: 181
TreeGridView(GridView).renderRows(int, int) line: 1559
TreeGridView(GridView).insertRows(ListStore<ModelData>, int, int, boolean) line: 1242
TreeGridView(GridView).onAdd(ListStore<ModelData>, List<ModelData>, int) line: 1293
GridView$5.storeAdd(StoreEvent<ModelData>) line: 1179
GridView$5(StoreListener<M>).handleEvent(StoreEvent<M>) line: 22
GridView$5(StoreListener<M>).handleEvent(BaseEvent) line: 1
TreeGrid$2(BaseObservable).callListener(Listener<BaseEvent>, BaseEvent) line: 176
TreeGrid$2(BaseObservable).fireEvent(EventType, BaseEvent) line: 96
TreeGrid$2(ListStore<M>).insert(List<? extends M>, int, boolean) line: 467
TreeGrid$2(ListStore<M>).insert(List<? extends M>, int) line: 266
TreeGrid<M>.onAdd(TreeStoreEvent<M>) line: 430
TreeGrid$1.storeAdd(StoreEvent<M>) line: 123
TreeGrid$1(StoreListener<M>).handleEvent(StoreEvent<M>) line: 22
TreeGrid$1(StoreListener<M>).handleEvent(BaseEvent) line: 1
TreeStore<M>(BaseObservable).callListener(Listener<BaseEvent>, BaseEvent) line: 176
TreeStore<M>(BaseObservable).fireEvent(EventType, BaseEvent) line: 96
TreeStore<M>.doInsert(TreeModel, List<TreeModel>, int, boolean, boolean) line: 799
TreeStore<M>.insert(List<M>, int, boolean) line: 493
TreeStore<M>.add(List<M>, boolean) line: 163
TreeStore<M>.add(M, boolean) line: 174
PnlClientFactory.populatePnlDataTreeStore(AggregateStringGWTTable, TreeStore<BaseModel>) line: 42
MainPage$9(MainPage$MainPnlSummaryTablesAsyncCallback).onSuccess(GWTPair<AggregateStringGWTTable,AggregateStringGWTTable>) line: 403
MainPage$9(MainPage$MainPnlSummaryTablesAsyncCallback).onSuccess(Object) line: 1
RequestCallbackAdapter<T>.onResponseReceived(Request, Response) line: 215
Request.fireOnResponseReceivedImpl(RequestCallback) line: 264
Request.fireOnResponseReceivedAndCatch(GWT$UncaughtExceptionHandler, RequestCallback) line: 236
Request.fireOnResponseReceived(RequestCallback) line: 227
NativeMethodAccessorImpl.invoke0(Method, Object, Object[]) line: not available [native method]
NativeMethodAccessorImpl.invoke(Object, Object[]) line: 39
DelegatingMethodAccessorImpl.invoke(Object, Object[]) line: 25
Method.invoke(Object, Object...) line: 597
MethodAdaptor.invoke(Object, Object...) line: 103
IDispatchImpl.callMethod(CompilingClassLoader, Object, Variant[], MethodAdaptor) line: 126
IDispatchProxy.invoke(int, int, Variant[]) line: 155
IDispatchProxy(IDispatchImpl).Invoke(int, int, int, int, int, int, int, int) line: 294
IDispatchProxy(IDispatchImpl).method6(int[]) line: 194
COMObject.callback6(int[]) line: 117
OS.DispatchMessageW(MSG) line: not available [native method]
OS.DispatchMessage(MSG) line: 1925
Display.readAndDispatch() line: 2966
HostedMode(SwtHostedModeBase).processEvents() line: 235
HostedMode(HostedModeBase).pumpEventLoop() line: 558
HostedMode(HostedModeBase).run() line: 405
HostedMode.main(String[]) line: 232
C:\Program Files\Java\jdk1.6.0_06\bin\javaw.exe (Jul 29, 2009 2:11:16 PM)
【问题讨论】:
【参考方案1】:好的,似乎服务器在进行 RPC 调用时抛出了一些 NullPointerExceptions...不过,我不明白为什么客户端堆栈跟踪看起来像这样(看起来有点误导,好像两个堆栈跟踪相互渗透)。
【讨论】:
以上是关于Ext-GWT TreeGrid 间接调用了 GWT-RPC 回调?为啥?的主要内容,如果未能解决你的问题,请参考以下文章
获取EXT-GWT RadioGroup中所选单选按钮的名称
在 ExtJS4 TreeGrid 中加载嵌套的 JSON 数据
要做一个treeGrid,总是提示 Ext.ux.tree.TreeGrid is not a constructor, js如下: