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