2016-06-01 8 views
1

Ich habe ein Formular mit mehreren Kontrollkästchen des Layouts: "[*] Elemente des Typs A (Anzahl: 2)". Jedes dieser Kontrollkästchen hat einen Link ("count: 2" im obigen Layout), der die Anzahl der Elemente in der Liste anzeigt, die an das entsprechende Kontrollkästchen angehängt sind. Der Link öffnet ein weiteres Formular zum Hinzufügen von Elementen zur Liste. Wenn der Benutzer ein solches Kontrollkästchen aktiviert, wird der Link aktiviert und sie kann Elemente hinzufügen. Wenn das Kontrollkästchen aktiviert ist und keine Elemente hinzugefügt werden, muss beim Übermitteln des Formulars ein Fehler angezeigt werden.Wicket - Update-Modell mit Ajax ohne Validierung

Ich habe versucht, mit AjaxCheckbox den Link zu aktivieren/deaktivieren, und es funktionierte gut, bis ich einen Validator zum Kontrollkästchen hinzugefügt (um die obige Bedingung zu überprüfen). Das Problem ist: Wenn eine Ajax-Anfrage von der Checkbox gesendet wird, wird der Validator aufgerufen und die Validierung schlägt fehl, da es noch keine Einträge in der Liste gibt.

Gibt es eine Möglichkeit in Wicket, einen Validator für eine Komponente zu haben und diese nur beim Senden des Formulars zu verwenden und nicht beim Senden von Ajax-Anfragen? Mit anderen Worten, Ajax, das nur das Modell aktualisiert.

Ich weiß, ich kann IFormValidator verwenden, die nicht in AjaxFormComponentUpdatingBehavior Zyklus aufgerufen wird, aber dann würde ich wahrscheinlich so viele von ihnen erstellen müssen, wie es Kontrollkästchen auf dem Formular gibt, das ich vermeiden möchte.

PS: Entschuldigung dafür, dass ich kein Bild zur Verfügung stelle, mein Dev-Rechner befindet sich in einem isolierten gesicherten LAN und ich kann nicht einfach eine Datei von dort kopieren.

+0

Ist es möglich, dass Sie den Code oder Snapshot der Benutzeroberfläche zu schreiben? Es wird den Beantwortern helfen, bessere Details Ihrer Frage zu erhalten. – RBT

+0

Entschuldigung, aber ich kann dies aus Sicherheitsgründen nicht tun – koszek

Antwort

0

Sie können eine IFormValidator zum Formular hinzufügen, die nur aufgerufen werden, wenn das ganze Formular abgeschickt wird:

public class ItemsValidator extends AbstractFormValidator 
{ 

    @Override 
    public FormComponent<?>[] getDependentFormComponents() 
    { 
    return new FormComponent[]{checkbox}; 
    } 

    @Override 
    public void validate(Form<?> form) 
    { 
    if (checkbox.getConvertedInput() && items.isEmpty()) 
    { 
     error(checkbox); 
    } 
    } 
} 
+0

Danke, das sollte funktionieren, aber ich würde lieber diese Prüfungen in der zugehörigen Komponente behalten, sie nicht außerhalb des Formulars propagieren. Ich habe [Ihre Antwort] (http://stackoverflow.com/a/23974530/6399437) gefunden, in der Sie vorschlagen, im Anforderungszyklus ein Flag zu setzen, das von Validatoren verwendet werden soll. Ich denke, dass diese Lösung tun sollte. – koszek

+0

Das Einschließen des Kontrollkästchens in einem FormComponentPanel wäre eine weitere Alternative - es kann Ihre Kontrollkästchen-/Elementkombination beim Senden des Formulars validieren. – svenmeier

+0

Sorry, verstehe nicht, wie FormComponentPanel mit meinem Ajax-Problem helfen kann? Kannst du ein wenig weiterarbeiten? – koszek