enhancement
major
minor
defect
critical
major
minor
major
#30133
Ebene anzeigen: Ein Feld, das aufgrund der dynamischen Sichtbarkeit als Pflichtfeld gekennzeichnet ist, verliert bei einer Validierungsänderung die Markierung „erforderlich“.
Problem
In einer React-View-Schicht <form> berechnet `AttributeFieldControl#applyMode` (com.top_logic.layout.view, form/AttributeFieldControl.java) den Pflichtstatus eines Feldes anhand seines Modus: einer dynamischen Sichtbarkeit, die den Wert `MANDATORY` ergibt, oder der Annotationen „create“ bzw. „edit“ für `DEFAULT`, begrenzt durch die Schreibberechtigung. Es setzt die entsprechende Markierung für die Pflichtangabe im Chrome entsprechend (_chrome.setRequired(mandatory)).
Der Validierungs-Listener desselben Steuerelements setzt die Markierung anschließend auf das statische Pflichtfeld-Flag des Feldmodells zurück:
public void onValidationChanged(FieldModel source) {
...
_chrome.setRequired(source.isMandatory());
}
FieldModel#isMandatory() spiegelt ausschließlich die statische „mandatory“-Deklaration des Attributs wider. Ein Feld, das nur aufgrund seiner dynamischen Sichtbarkeit (oder nur bei der Erstellung) obligatorisch ist, zeigt daher sein * an, bis sich seine Validierung zum ersten Mal ändert – z. B. wenn eine Einschränkung einen Fehler meldet oder ein Fehler verschwindet – und verliert es von da an. Umgekehrt erhält ein statisch obligatorisches Feld, das durch den Modus schreibgeschützt, deaktiviert oder ausgeblendet wird, die Markierung bei einer Validierungsänderung wieder.
Reproduktion
Ein Attribut ohne `mandatory="true"`, dessen dynamische Sichtbarkeit `MANDATORY` ergibt, sowie eine darauf angewandte Einschränkung. Öffnen Sie ein Erstellungsformular: Das Feld zeigt ein `*` an . Geben Sie einen Wert ein, den die Einschränkung ablehnt: Der Fehler wird angezeigt und das `*` verschwindet.
Behebung
Der Validierungs-Listener behält den von `applyMode` berechneten Pflichtstatus bei (speichert ihn in einem Feld und wendet ihn erneut an oder ruft den Teil von `applyMode` auf, der den Chrome-Status festlegt), anstatt das statische Flag auszulesen.