1

我正在使用 gwt 和 smart gwt 的组合。但是,每当我的页面加载时,我都会收到以下错误。请帮我解决这个问题。. 请找到随附的屏幕截图以获取相同的弹出错误图像

15:06:02.097 [ERROR] [detectfiles] 15:06:02.097:TMR5:WARN:Log:Error:
    'Object required'
    in /sc/modules/ISC_Core.js
    at line 1782
    [c]Element.getOffsetLeft(_1=>[DIVElement]{ID:isc_0})
    [c]Element.getOffset(_1=>"left", _2=>[ImgButton ID:isc_ImgButton_0], _3=>undef, _4=>false, _5=>true)
    Canvas.getLeftOffset(_1=>undef)
    Canvas.getPageLeft()
    Canvas.$414(null, undef)
    [c]Page.handleEvent(_1=>null, _2=>"resize", _3=>undef)
    [c]EventHandler.$78p(_1=>"landscape")
    [c]EventHandler.$hr(_1=>undef)
    callback(undefined=>undef)
        "isc.EH.$hr()"
    [c]Class.fireCallback(_1=>"isc.EH.$hr()", _2=>undef, _3=>Array[0], _4=>Obj{length:2}, _5=>true) on [Class Timer]
    [c]Timer.$in(_1=>"$ir28")
    anonymous()
        "isc.Timer.$in('$ir28')"

com.smartgwt.client.core.JsObject$SGWT_WARN: 15:06:02.097:TMR5:WARN:Log:Error:
    'Object required'
    in /sc/modules/ISC_Core.js
    at line 1782
    [c]Element.getOffsetLeft(_1=>[DIVElement]{ID:isc_0})
    [c]Element.getOffset(_1=>"left", _2=>[ImgButton ID:isc_ImgButton_0], _3=>undef, _4=>false, _5=>true)
    Canvas.getLeftOffset(_1=>undef)
    Canvas.getPageLeft()
    Canvas.$414(null, undef)
    [c]Page.handleEvent(_1=>null, _2=>"resize", _3=>undef)
    [c]EventHandler.$78p(_1=>"landscape")
    [c]EventHandler.$hr(_1=>undef)
    callback(undefined=>undef)
        "isc.EH.$hr()"
    [c]Class.fireCallback(_1=>"isc.EH.$hr()", _2=>undef, _3=>Array[0], _4=>Obj{length:2}, _5=>true) on [Class Timer]
    [c]Timer.$in(_1=>"$ir28")
    anonymous()
        "isc.Timer.$in('$ir28')"
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
    at java.lang.reflect.Constructor.newInstance(Constructor.java:513)
    at com.google.gwt.dev.shell.MethodAdaptor.invoke(MethodAdaptor.java:105)
    at com.google.gwt.dev.shell.MethodDispatch.invoke(MethodDispatch.java:71)
    at com.google.gwt.dev.shell.OophmSessionHandler.invoke(OophmSessionHandler.java:172)
    at com.google.gwt.dev.shell.BrowserChannelServer.reactToMessages(BrowserChannelServer.java:292)
    at com.google.gwt.dev.shell.BrowserChannelServer.processConnection(BrowserChannelServer.java:546)
    at com.google.gwt.dev.shell.BrowserChannelServer.run(BrowserChannelServer.java:363)
    at java.lang.Thread.run(Thread.java:662)

请找到随附的屏幕截图以获取相同的弹出错误图像

智能 gwt 错误

这是一段代码,我在弹出窗口中使用 TreeGrid

private PopupPanel createConsoPopup() {
    final PopupPanel consoPopup = new PopupPanel();
    consoPopup.setAnimationEnabled(true);
    consoPopup.setAutoHideEnabled(true);
    VerticalPanel consoContent = new VerticalPanel();
    VEPConsoTree consoTree = new VEPConsoTree(lineTreeNode, vepConsoTree);
    vepConsoTree = consoTree.getCheckStationTree();
    vepConsoTree.addSelectionChangedHandler(new SelectionChangedHandler() {
        @Override
        public void onSelectionChanged(SelectionEvent event) {
            ((TextBox)flexTable.getWidget(selectedRowNum,         0)).setText(vepConsoTree.getSelectedRecord().getAttribute("vepAreaName")+"_"+vepConsoTree.getSelectedRecord().getAttribute("checkStationName"));
            consoPopup.hide();

        }
    });
    consoContent.add(consoTree);
    consoPopup.add(consoContent);
    return consoPopup;
}

以下是我的 VEPConsoTree 类:

package com.renault.veppwrstats.client;

import com.google.gwt.user.client.ui.Composite;
import com.smartgwt.client.types.TreeModelType;
import com.smartgwt.client.widgets.events.DrawEvent;
import com.smartgwt.client.widgets.events.DrawHandler;
import com.smartgwt.client.widgets.tree.Tree;
import com.smartgwt.client.widgets.tree.TreeGrid;
import com.smartgwt.client.widgets.tree.TreeNode;

public class VEPConsoTree extends Composite {

private TreeNode[] lineTreeNode;
private TreeGrid vepConsoTree;
//private DFConstantsForLocale constants = GWT.create(DFConstantsForLocale.class);


/**
 * @param lineTreeNode
 * @param vepConsoTree
 */
public VEPConsoTree(TreeNode[] lineTreeNode, TreeGrid vepConsoTree) {
    super();
    this.lineTreeNode = lineTreeNode;
    this.vepConsoTree = vepConsoTree;
    //Grid grid = chckStatRestrictPanel();
    initWidget(vepConsoTree());
}

/**
 * This function creates checkStation Restriction Panel(tree) along with
 * Select/Unselect All button
 * 
 * @return
 */
private TreeGrid vepConsoTree() {
    return createTreeGrid();
}

/**
 * This function creates CheckStation Restriction Tree
 * 
 * @return {@link TreeGrid}
 */
private TreeGrid createTreeGrid() {
    final TreeGrid chckTreeGrid = new TreeGrid();
    chckTreeGrid.setHeight("269px");
    chckTreeGrid.setWidth("250px");
    chckTreeGrid.setData(createChkStationTree());
    //chckTreeGrid.setSelectionAppearance(SelectionAppearance.CHECKBOX);
    //chckTreeGrid.setShowPartialSelection(false);
    //chckTreeGrid.setCascadeSelection(true);
    chckTreeGrid.setFolderIcon(null);
    chckTreeGrid.setNodeIcon(null);
    chckTreeGrid.setShowConnectors(true);
    chckTreeGrid.setShowHeader(false);
    //addSelectionChangeHndler(chckTreeGrid);
    chckTreeGrid.addDrawHandler(new DrawHandler() {
        public void onDraw(DrawEvent event) {
            chckTreeGrid.getTree().openAll();
        }
    });
    vepConsoTree = chckTreeGrid;
    return chckTreeGrid;
}

/**
 * This function creates a basic tree
 */
private Tree createChkStationTree() {
    Tree chckStationTree = new Tree();
    chckStationTree.setModelType(TreeModelType.PARENT);
    chckStationTree.setRootValue(1);
    chckStationTree.setIdField("id");
    chckStationTree.setOpenProperty("isOpen");
    chckStationTree.setData(lineTreeNode);
    chckStationTree.setParentIdField("parent");
    return chckStationTree;

}


/**
 * @return the vepConsoTree
 */
public final TreeGrid getCheckStationTree() {
    return vepConsoTree;
}

/**
 * @param vepConsoTree the vepConsoTree to set
 */
public final void setCheckStationTree(TreeGrid checkStationTree) {
    this.vepConsoTree = checkStationTree;
}

/**
 * @return the lineTreeNode
 */
public final TreeNode[] getLineTreeNode() {
    return lineTreeNode;
}

/**
 * @param lineTreeNode the lineTreeNode to set
 */
public final void setLineTreeNode(TreeNode[] lineTreeNode) {
    this.lineTreeNode = lineTreeNode;
}

}

4

1 回答 1

0

简短回答:尽可能不要混合 GWT 和 SmartGWT

我可以混合使用 Smart GWT 和 GWT 小部件吗?

是的,有警告。

Smart GWT 具有互操作性支持,允许将 Smart GWT 小部件添加到 GWT 容器中,并允许将 GWT 小部件添加到 Smart GWT 容器中,它适用于:

向 Smart GWT 的增量迁移,例如将单个、复杂的 Smart GWT 组件(如 Calendar 或 CubeGrid)引入现有 GWT 应用程序

在 Smart GWT 中使用复杂的第三方 GWT 小部件,其中 Smart GWT 没有相应的内置功能

但是,随意混合 Smart GWT 和 GWT(或其他)组件是没有意义的,也就是说,例如,您不应该将 GWT 小部件放置在 Smart GWT 容器中,而 Smart GWT 容器又位于 GWT 容器中。一般来说,不要混合小部件,除非您需要某个功能。

这样做的原因是两个 Ajax 小部件工具包(包括 GWT)可以互操作的最大程度是有限的 - 在 tab 顺序管理、zIndex 管理、像素完美布局、部分等领域没有允许互操作性的标准508 可访问性和多级模式。

请注意,在不恰当地混合 GWT 和 Smart GWT 时报告的“错误”(即与这些指南相矛盾)通常会被标记为 WONTFIX,尽管如果核心 GWT 开始支持能够更好地实现 API 的 API,我们将在未来重新审视这一点互操作性。

如果你真的需要混合 GWT 和 SmartGWT,这里是 Isomorphic 的指南

因为 Smart GWT 的像素完美布局和自动调整大小支持超出了简单 CSS 布局的能力,组件需要知道它们的父元素分配的实际像素宽度;它们不能“流入”未指定大小的 HTML 元素。

这里的问题是 GWT 的容器没有提供类似于 Smart GWT 的 Canvas.getInnerWidth() 的 API,在 Smart GWT 中,子组件可以使用它来找出可用空间来绘制自己,从而递归地布置它们的自己的孩子。GWT 容器也不会在调整大小时触发事件,或者当可用宽度因各种原因发生变化时(例如引入滚动条,或 CSS 样式更改添加边框并因此减少空间)。

要真正创建一个可扩展的像素完美布局系统,需要大量的父<->子协调和信号。Smart GWT/SmartClient 已经实现了所有必要的钩子,以允许第三方小部件嵌入到 Canvas 中并参与精确的布局,但 GWT 还没有。

如果您绝对必须在 GWT 容器中放置 Smart GWT 接口并且希望它填充容器,那么最好的方法是监听窗口级别的调整大小事件并运行您自己的布局计算,最终在最顶层调用 resizeTo()智能 GWT 小部件。然后,嵌套在该最顶层小部件下的所有 Smart GWT 小部件将正常处理布局。

注意:不要费心寻找一种方法将 width:100% 插入 Smart GWT 呈现的 HTML,这不会起作用。

来源:http ://forums.smartclient.com/showthread.php?t=8159

于 2012-05-28T22:14:42.140 回答