Verbesserung
Top-Thema
Detail
Wichtig
Detail
Ist aus Ticket #26142 extrahiert.
Die NullPointerException ist ein generelles Problem, die durch die Umstellung mit der Pre-Validierung durch Ticket #23472 entstanden ist.
Aus Sicherheitsgründen bieten die Browser event.dataTransfer nur während des Handling eines Drops an, ansonsten ist der Wert undefined. Durch die Änderungen in #23472 werden die Drag-and-Drop Daten nun am window Objekt gehalten, konkret in window.tlDnDData. Diese werden beim dragStart gefüllt. So sind die Daten insbesondere auch beim dragOver verfügbar und können zur Beurteilung, ob an dieser Stelle ein Drop möglich ist, mit in die Berechnung einbezogen werden.
Die NullPointerException entsteht nun, falls ein beliebiger Text (bspw. der Komponentenname in der Toolbar), der nicht aus einer Tabelle oder Baum stammt, über eine Komponente gedraggt wird, die einen Drop-Handler besitzt. Dadurch dass der Handler, der das window.tlDnDData füllt, beim dragStart nicht ausegführt wird, da der Event-Handler nur für Tabellen und Bäume registriert wird, sind die Daten leer und somit kann der DnD beim dragOver nicht geparst werden. Man erhält schließlich eine NullPointerException.
Umsetzung
- Durch eine zusätzliche Prüfung im dragOver auf die Existenz von window.tlDnDData kann die Exception verhindert werden.
- Der Inhalt von window.tlDnDDate wird am Ende einer Drag-Operation resettet, sodass nach einem gültigen Drag&Drop und anschließendem Drag&Drop eines Textes man keinen inkosistenten Zustand erhält.
Test
In der Sicht Technisches Demo > Komponenten > Drag & Drop navigieren und einen Text auf den Fabrikplan ziehen. Es sollte keine Exception geworfen werden.