Wichtig
Kleinigkeit
Fehlerbehebung
Wichtig
Ein CommandHandler operiert im Kontext einer Komponente und bezieht sich auf ein Fachobjekt:
#!java CommandHandler.handleCommand(DisplayContext, LayoutComponent, Object model, Map<String, Object>)
Das Modell-Objekt wird aus der Komponente extrahiert. Hierfür kann die CommandHandler-Implementierung bisher einen Hook ausfüllen:
#!java CommandHandler.getTargetModel(LayoutComponent)
Die 1-zu-1-Verbindung von Kommando-Implementierung und Spezifikation des Ziel-Objektes für das Kommando schränkt die Verwendbarkeit des Kommandos allerdings ein. So kann dasselbe Kommando nicht für das aktuell in einem Formular angezeigte Objekt oder die selektierte Zeile in einer Tabelle verwendet werden.
Verbesserung
Das Ziel-Objekt relativ zu der Kontext-Komponente des Kommandos kann konfiguriert werden. Hierfür wird dieselbe Syntax wie für die Modell-Definition einer Komponente eingesetzt (model="selection(other-component)"). Die Syntax wird gerinfügig erweitert, dammit man sich auch auf die eigene Komponente beziehen kann: target="selection(self())".
Anwendung
Konfiguration des Zielobjektes für ein Kommando relativ zu der Komponente, an der das Kommando konfiguriert ist:
#!xml <button id="delete" class="MyDeleteHandler" ... target="selection(self())" />
Test
- Refactoring: Bisherige Überschreibungen von getTargetModel() wurden auf die Konfigurationsoption umgestellt. Kein zusätzlicher Test.