Wicket : Kann ein Panel oder eine Komponente reagiert auf eine form submit ohne boilerplate-code?
Ich bin derzeit auf der Auswertung von Wicket und ich bin versucht, herauszufinden, wie die Dinge funktionieren.
Ich habe eine Frage bezüglich form Einreichen und-Platten (oder anderen Komponenten).
Stellen Sie sich eine benutzerdefinierte wicket-panel enthält ein text-Feld, dabei wie-Sie-Typ-Validierung mit ajax. Dieses panel ist mit einem Formular Hinzugefügt.
Wie kann das Panel reagieren, eine form Einreichen (lassen Sie uns sagen, weil javascript/ajax nicht verfügbar ist)?
Ich bin derzeit kennen nur eine Lösung: aufrufen einer panel-Methode im Formular onSubmit () - Methode. Aber dies scheint nicht wie ein "Mehrweg" - Ansatz hier, weil ich muss hinzufügen, boilerplate-code zu jedem Formular onSubmit() enthält das panel (und jeder Entwickler, welche das panel muss wissen das).
So, hier kommt meine Frage: gibt es eine Möglichkeit, dass ein Panel/Komponente können Sie "erkennen" ein Formular Einreichen, in irgendeiner Weise? Oder gibt es eine andere Lösung neben der das?
Danke.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Machen Sie Ihre panels implementieren
org.apache.wicket.markup.html.form.IFormModelUpdateListener
, und dieupdateModel()
Methode sollte aufgerufen werden, wenn die aufnehmende form eingereicht wird und Validierung weiterleitet.Es ist ein gutes Beispiel für code mit diesem durch eine von der wicket-Autoren an den Wicket In Action blog.
Gut, Sie könnten, tun Sie einfach Folgendes:
...
Dies bedeutet, dass jedes panel, das erweitert Ihre Systemsteuerung müssen nur das überschreiben der "onSubmit" und die form, egal was es ist im html-Code aufrufen dieser Methode. So verlängern Sie die Systemsteuerung, und nur überschreiben einer Methode für jede form.
In Bezug auf form-Komponenten, die das framework handhabt es für Sie transparent. Die Formen sind bewusst keine untergeordnete Formular-Komponenten, auch wenn Sie nicht direkt an das übergeordnete Formular.
Hätte ich ein Formular in das Panel. Auf diese Weise können Sie die Wiederverwendung, das Panel, ohne dass eine äußere Form. Als Formen können nicht verschachtelt Ineinander im HTML -, Wicket wird, tauschen Sie die innere Form(s) in 's transparent, aber stellen Sie sicher, dass jeder von der inneren Formen nimmt Teil der form, der Verarbeitung (Validierung,..).
Können Sie überschreiben die OnSubmit () - Funktion des Formulars in Ihrem Panel. Wicket nennen wird es für Sie.
was meinst du mit "reagieren"? Ich habe erst vor kurzem mit Wicket, aber FWIK, form submit updates der Modell einer Komponente und ruft dann
onSubmit()
, die Sie überschreiben können, um spezielle Aktionen darüber hinaus. Sehen Wicket in Action, Kapitel 6.Nach, dass die Seite (und seine Komponenten) sofort neu gerendert, verwenden Sie das aktualisierte Modell, also im Grunde, Sie wirklich "reagieren" auf eine submit, mit ganz wenigen Zeilen code.
Für deinen genannten Fall-mit-Komponente in einem Formular haben Sie einen Blick auf die
CompoundPropertyModel
.Umsetzung IFormSubmitListner und IFormModelUpdateListener ruft die entsprechenden Methoden, die während einer form Einreichen.
Jedoch, wenn Sie wollen, zu tun, einige Bearbeitung nach form submit, ich fürchte, Sie haben keine andere Wahl, als zu schreiben, boilerplate-code selbst.