GWT在托管模式下运行事件

GWT在托管模式下运行事件,gwt,gwt-celltable,Gwt,Gwt Celltable,我扩展了一个gwt celltable来创建一个自定义celltable,我注册了sinkie onmouseover/onmouseout。 当您将鼠标悬停在表格的行上时,行数据将填充在hover wiget(自定义悬停弹出面板)上。 它的工作原理与开发模式相同,但一旦部署到tomcat上,当您将鼠标移动到celltable上的不同行上时,它就会 不更新弹出面板上的悬停数据,除非单击远离表格的位置(焦点松动)并再次在行上悬停 public class MyCellTable<T>

我扩展了一个gwt celltable来创建一个自定义celltable,我注册了sinkie onmouseover/onmouseout。 当您将鼠标悬停在表格的行上时,行数据将填充在hover wiget(自定义悬停弹出面板)上。 它的工作原理与开发模式相同,但一旦部署到tomcat上,当您将鼠标移动到celltable上的不同行上时,它就会 不更新弹出面板上的悬停数据,除非单击远离表格的位置(焦点松动)并再次在行上悬停

public class MyCellTable<T> extends CellTable<T> {
    private Tooltip popup = new Tooltip();
    private List<String> tooltipHiddenColumn = new ArrayList<String>();
    private boolean showTooltip;

    public MyCellTable() {
        super();
        sinkEvents(Event.ONMOUSEOVER | Event.ONMOUSEOUT);
    }

    @Override
    public void onBrowserEvent2(Event event) {
        super.onBrowserEvent2(event);
        if (isShowTooltip()) {
            switch (DOM.eventGetType(event)) {
                case Event.ONMOUSEOUT: {
                    popup.hide(true);
                    break;
                }
                case Event.ONMOUSEOVER: {
                    popup.setAutoHideEnabled(true);
                    showToolTip(event);
                    break;
                }
            }
        }
    }

    private void showToolTip(final Event event) {
        EventTarget eventTarget = event.getEventTarget();
        if (!Element.is(eventTarget)) {
            return;
        }
        final Element target = event.getEventTarget().cast();
        // Find the cell where the event occurred.
        TableCellElement tableCell = findNearestParentCell(target);
        if (tableCell == null) {
            return;
        }
        Element trElem = tableCell.getParentElement();
        if (trElem == null) {
            return;
        }
        TableRowElement tr = TableRowElement.as(trElem);
        Element sectionElem = tr.getParentElement();
        if (sectionElem == null) {
            return;
        }
        TableSectionElement section = TableSectionElement.as(sectionElem);
        if (section == getTableHeadElement()) {
            return;
        }
        NodeList<TableCellElement> cellElements = tr.getCells().cast();
        NodeList<TableCellElement> headers = getTableHeadElement().getRows().getItem(0).getCells().cast();
        popup.getGrid().clear(true);
        popup.getGrid().resizeRows(cellElements.getLength());
        for (int i = 0; i < cellElements.getLength(); i++) {
            if (getTooltipHiddenColumn().indexOf(headers.getItem(i).getInnerHTML()) == -1) {
                TableCellElement tst = TableCellElement.as(cellElements.getItem(i));
                popup.getGrid().setHTML(i, 0, headers.getItem(i).getInnerHTML());
                popup.getGrid().setHTML(i, 1, tst.getInnerHTML());
            }
        }
        // Here the constant values are used to give some gap between mouse pointer and popup panel
        popup.setPopupPositionAndShow(new PopupPanel.PositionCallback() {
            public void setPosition(int offsetWidth, int offsetHeight) {
                int left = event.getClientX() + 5;
                int top = event.getClientY() + 5;
                if ((offsetHeight + top + 20) > Window.getClientHeight()) {
                    top = top - offsetHeight - 10;
                }
                popup.setPopupPosition(left, top);
            }
        });
        popup.show();
    }

    public ArrayList<ReorderColumnsDetails> getColumnsHeaders(int index){ 
        ArrayList<ReorderColumnsDetails> column = new ArrayList<ReorderColumnsDetails>();
        NodeList<TableCellElement> headers = getTableHeadElement().getRows().getItem(0).getCells().cast();
        for (int i = 0; i < index; i++) {
            ReorderColumnsDetails clm = new ReorderColumnsDetails();
            clm.setHearder(headers.getItem(i).getInnerHTML().toString());
            clm.setItemIndex(i);
            column.add(clm);
        }    
        return  column;     
    }

    private TableCellElement findNearestParentCell(Element elem) {
        while ((elem != null) && (elem != getElement())) {
            String tagName = elem.getTagName();
            if ("td".equalsIgnoreCase(tagName) || "th".equalsIgnoreCase(tagName)) {
                return elem.cast();
            }
            elem = elem.getParentElement();
        }
        return null;
    }

    /**
     * Specify Name of the column's which is not to shown in the Tooltip
     */
    public List<String> getTooltipHiddenColumn() {
        return tooltipHiddenColumn;
    }

    /**
     * Set title to tooltip
     * 
     * @param title
     */
    public void setTooltipTitle(String title) {
        popup.setHTML(title);
    }

    public boolean isShowTooltip() {
        return showTooltip;
    }

    public void setShowTooltip(boolean showTooltip) {
        this.showTooltip = showTooltip;
    }
}
公共类MyCellTable扩展了CellTable{
专用工具提示弹出窗口=新工具提示();
私有列表tooltipHiddenColumn=new ArrayList();
私有布尔显示工具提示;
公共菌丝表(){
超级();
sinkEvents(Event.ONMOUSEOVER | Event.ONMOUSEOUT);
}
@凌驾
public void onBrowserEvent2(事件){
超级浏览器事件2(事件);
如果(isShowTooltip()){
开关(DOM.eventGetType(事件)){
case Event.ONMOUSEOUT:{
popup.hide(true);
打破
}
case Event.ONMOUSEOVER:{
popup.setAutoHideEnabled(真);
显示工具提示(事件);
打破
}
}
}
}
私有无效显示工具提示(最终事件){
EventTarget EventTarget=event.getEventTarget();
如果(!Element.is(eventTarget)){
返回;
}
最终元素target=event.getEventTarget().cast();
//查找事件发生的单元格。
TableCellElement tableCell=findNearestParentCell(目标);
if(tableCell==null){
返回;
}
Element trElem=tableCell.getParentElement();
if(trElem==null){
返回;
}
TableRowElement tr=TableRowElement.as(trElem);
元素sectionElem=tr.getParentElement();
if(sectionElem==null){
返回;
}
TableSectionElement节=TableSectionElement.as(sectionElem);
如果(节==getTableHeadElement()){
返回;
}
NodeList cellElements=tr.getCells().cast();
NodeList headers=getTableHeadElement().getRows().getItem(0.getCells().cast();
popup.getGrid().clear(true);
popup.getGrid().resizeRows(cellElements.getLength());
对于(int i=0;iWindow.getClientHeight()){
top=top-斜视-10;
}
弹出。设置弹出位置(左、上);
}
});
popup.show();
}
公共数组列表getColumnsHeaders(int索引){
ArrayList column=新的ArrayList();
NodeList headers=getTableHeadElement().getRows().getItem(0.getCells().cast();
对于(int i=0;i
你能发布一些代码吗?我编辑了问题并添加了代码从你的代码中删除
getColumnsHeaders
,并添加了工具提示代码,虽然一个简单的工作代码显示了问题应该很好。您好,代码在开发模式下运行良好,问题从部署到tomcat/webserver时开始。事件未按应有的方式触发。检查onBrowserEvent2,它在onmouseout和onmouseover事件发生变化时触发,但一旦部署到Web服务器上,它就不会触发。onmouseout不仅仅在生产环境中触发,这是为什么?