I have implemented a DropHandler to a table. I want to be able to sort rows by draging. Found this thread and implemented my Drag&Drop support same way.
That way works with Eclipse’s browser and with IE when I connect directly to localhost. When I use my application as a Facebook application. (Inside iFrame, redirection and so on…) Drag halts the application totally, it never gets to Drop-listener. It just halts right after drag starts.
I dont know ho to solve this or if there is some issue with Drag&Drop / iFrame / Facebook.
I wont paste my DropListener code here, cause it dosnt matter if there is code or not, application halts before it gets called.
Any ideas / toughts? I could implement row ordering with arrow buttons or so, but I would prefer Drag&Drop.
More testing… Eclipse’s browser crashes same way was IE when I run application inside Facebook. BUT, it works flawlessly when I use Firefox. Actually, it works better with Firefox inside / outside Facebook than with IE outside Facebook. With IE I have a problem, that when I drag a row to new place and want to drag same row to second place I first have to de-select the row and then select it again. Using Firefox I can keep dragging the row to new position.
And more testing. Problem occurs only with IE8 and inside Facebook’s iFrame. I dont know if it happens inside any iFrame or just Facebook’s when I run application as Facebook application. But it works with IE8’s IE7 mode and Firefox.
Heres simple code, that brings the problem:
package com.example.vaadin;
import com.vaadin.Application;
import com.vaadin.ui.Table;
import com.vaadin.ui.Table.TableDragMode;
import com.vaadin.ui.Window;
public class VaadinApplication extends Application {
private static final long serialVersionUID = 1L;
private Table teamTable;
private TeamContainer teamDataContainer;
private Window mainWindow;
@Override
public void init() {
this.mainWindow = new Window("Vaadin Application");
super.setMainWindow(this.mainWindow);
this.initTeamTable();
this.mainWindow.addComponent(this.teamTable);
}
private void initTeamTable() {
this.teamTable = new Table();
this.teamDataContainer = new TeamContainer();
this.teamDataContainer.fillWithTestdata();
this.teamTable.setContainerDataSource(this.teamDataContainer);
this.teamTable.setSelectable(true);
this.teamTable.setDragMode(TableDragMode.ROW);
}
}
package com.example.vaadin;
import java.io.Serializable;
import com.vaadin.data.util.BeanItemContainer;
public class TeamContainer extends BeanItemContainer<Team> implements Serializable {
private static final long serialVersionUID = 1L;
public TeamContainer() {
super(Team.class);
}
public void fillWithTestdata() {
this.addItem( new Team("Team 1",1));
this.addItem( new Team("Team 2",2));
this.addItem( new Team("Team 3",3));
this.addItem( new Team("Team 4",4));
this.addItem( new Team("Team 5",5));
}
}
And if anyone feels like testing that code as Facebook application = bring the problem visible, heres a link (No need for Facebook account):