Fehlerbehebung
Wichtig
#28197
Sortieren einer Kompositionstabelle nach einer Spalte mit SelectField führt zu ClassCastException
Wenn in einem Formular ein Kompositions-Attribut als Tabelle dargestellt wird, scheitert das Sortieren dieser Tabelle nach Spalten die ein tl:SelectField enthalten. Es wird eine Fehlermeldung angezeigt und die Sortierung für diese Tabelle deaktiviert.
Das Problem lässt sich im Demo mit passendem Modell und Formular reproduzieren. Auf dem Demo Test-Server zum Beispiel in der Sicht Technisches Demo > Tests > Jan wenn nach der Spalte "Select" sortiert wird.
Analyse
Ursache scheint zu sein, dass das SelectField als Wert eine SingletonList enthält. Der tl:WrapperNameComparator erwartet aber ein einzelnes tl:TLObject in der Signatur seiner compare Methode.
Stacktrace
Caused by: java.lang.ClassCastException: class java.util.Collections$SingletonList cannot be cast to class com.top_logic.model.TLObject at com.top_logic.knowledge.wrap.WrapperNameComparator.compare(WrapperNameComparator.java:27) at com.top_logic.basic.col.ComparatorProxy.compare(ComparatorProxy.java:110) at com.top_logic.basic.col.NullSafeComparator.compare(NullSafeComparator.java:108) at com.top_logic.basic.col.MappedComparator.compare(MappedComparator.java:150) at java.base/java.util.TimSort.countRunAndMakeAscending(TimSort.java:355) at java.base/java.util.TimSort.sort(TimSort.java:220) at java.base/java.util.Arrays.sort(Arrays.java:1307) at java.base/java.util.ArrayList.sort(ArrayList.java:1721) at java.base/java.util.Collections.sort(Collections.java:179) at com.top_logic.layout.table.model.SimpleTableModelStructure.revalidateOrder(SimpleTableModelStructure.java:136) at com.top_logic.layout.table.model.ObjectTableModel.revalidateOrder(ObjectTableModel.java:180) at com.top_logic.layout.table.model.AbstractObjectTableModel.setOrder(AbstractObjectTableModel.java:84) at com.top_logic.layout.table.TableViewModel.validate(TableViewModel.java:1355) ... 53 more
Test
- /com.top_logic.demo/src/test/java/test/com/top_logic/demo/scripted/model/attribute/composition/TestSortingCompositionTable.script.xml