[WICKET] clean form input trotz AjaxSubmitLink

hrbaer

Mitglied
Hi,

habe mal eine Frage zu folgendem Sachverhalt.
Ich habe ein Formular welches mittels eine AjaxSubmitLink abgesendet wird. In der onSubmit Methode erzeuge ich aus dem Formular-Feldern eine Entität welche im im Anschluss speichere. Darüber hinaus öffne ich ein modales Fenster welches dem Benutzer anzeigt, dass seine Eingabe erfolgreich war. Mein Problem ist, dass ich zwar die Daten in die DB bekomme und auch die Erfolgsmeldung zu sehen ist, ich aber weder die Eingabefelder geleert noch ggf. mögliche zuvor geworfene Validierungsfehler entfernt bekomme?!

Hier mal mein BSP-Code:
Java:
FormComponent<String> surname = new TextField<String>( Constants.SURNAME ).setType( String.class );
surname.setRequired( true );
add( surname );

final FeedbackPanel feedback = new FeedbackPanel( "feedback" );
feedback.setOutputMarkupId( true );
add( feedback );

add( new AjaxSubmitLink( "showModal" ){

        @Override
        protected void onError( AjaxRequestTarget target, Form<?> form ){
                target.addComponent( feedback );
        }

        @Override
        protected void onSubmit( AjaxRequestTarget target, Form<?> form ) {
       
                WebSession.get().cleanupFeedbackMessages();               //my attempt to clean the feedback message
                feedback.getFeedbackMessagesModel().setObject( null ); //another attempt to clean the feedback message
                clearInputValues();                                                    //my attempt to reset the input field
               
                PersistenceManager pm = PMF.getPersistenceManager();
                Entity ent = createEntity();
               
                try {
                        pm.makePersistent( ent );
                        modal.show( target );
                }
                catch( Exception e ){
                        info( "Exception" );
                }
                finally {
                        pm.close();
                }
       
        }

});


......

private void clearInputValues(){
        ValueMap values = getModelObject();
        values.put( Constants.SURNAME , "" );
}

Kann mir jemand weiterhelfen wie die Input-Felder wieder leer bekomme?
Danke im Voraus.
 

yajp

Mitglied
Hallo,
auf Anhieb würde ich sagen das liegt daran daß die Page bereits gerendert ist und die Modelchanges nicht mehr ziehen.
Versuch mal explizit eine neue Page (in setResponsePage()) zu setzen.


hth
 
G

Gelöschtes Mitglied 6946

Gast
Erwartest du, dass das Formular in der bereits dargestellten Seite per Javascript geändert wird? Im Normalfall muss man dem AjaxRequestTarget sagen, welche Komponenten es austauschen soll - habe nie mit Ajax in Verbindung mit Formularen gearbeitet, aber ich würde mal spontan vermuten, dass man das auch da explizit machen muss.
 

hrbaer

Mitglied
Erwartest du, dass das Formular in der bereits dargestellten Seite per Javascript geändert wird? Im Normalfall muss man dem AjaxRequestTarget sagen, welche Komponenten es austauschen soll - habe nie mit Ajax in Verbindung mit Formularen gearbeitet, aber ich würde mal spontan vermuten, dass man das auch da explizit machen muss.

Öhm...ich denke nicht. Ich will da weder was nachträglich manipulieren und schon gar nicht via Javascript?! Vielleicht steh ich aber auch einfach auf dem Schlauch und versteh die Frage nicht.

Mein Erwartung ist, dass sich das Formular analog zu einem normalen Request (kein AjaxSubmitLink sondern ein normaler Submit-Button) verhält. Da landet der Request in der Methode public final void onSubmit() wo ich mit exakt dem gleichen Code a) das Objekt speichere und b) die Formular-Daten zurück setze.

yajp hat gesagt.:
Versuch mal explizit eine neue Page (in setResponsePage()) zu setzen.
Grundsätzlich funktioniert dein Vorschlag. Allerdings wird jetzt das modale Fenster nicht mehr angezeigt :(
Habe das wie folgt versucht:
Java:
(...)
try {
  pm.makePersistent( antwort );
  target.addComponent( feedback );
  setResponsePage( SayHello.class );
  modal.show( target );
} 
(...)
 
G

Gelöschtes Mitglied 6946

Gast
Wenn du einen normalen Request machst, dann sendet der Server eine komplett neue Seite, der Browser lädt die komplett neu und entsprechend stehen dann im Formular auch die aktuellsten Änderungen drin, die du auf Serverseite gemacht hast. Bei Ajax wird die Seite nicht neu geladen und entsprechend passiert auf der Seite auch erstmal gar nix. Im Allgemeinen schickt der Server nur ein paar HTML-Schnipsel zurück, die dann per JavaScript an die passenden Stellen geschrieben wird, so dass sich Teile der Seite aktualisieren, ohne dass man einen kompletten Reload benötigt. Wenn man das nicht macht, passiert mit der Seite natürlich auch nichts und alles bleibt so, wie vor dem Klicken des Ajax-Links oder -Buttons.
 
G

Gelöschtes Mitglied 6946

Gast
Das meinte ich in meinem ersten Post :D Freut mich, dass es jetzt klappt ;)
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
J Wicket: Füllen von Textarea via AJAX irgendwo auf der PAGE Web Tier 1
aze Wicket: Komponente und erzeugtes ModalWindow haben unterschiedliche Referenzen Web Tier 0
K Wicket: Pfad zu HTML Dateien ändern/erweitern Web Tier 2
G Wicket Web Tier 6
M Joda DateTime in Wicket Web Tier 6
M Wicket: extends Panel aktualisieren Web Tier 6
H [WICKET] zusätzliche Zeilen per "Klick" generieren Web Tier 2
reibi Wicket - BSP signIn2 ... Cookies Web Tier 3
reibi Wicket HelloWorld Web Tier 7
F Wicket vs Tapestry Web Tier 10
G JSF vs. Tapestry vs. Wicket Web Tier 6
J Wicket dynamisches Markup Web Tier 3
D Wicket mit Spring ohne extra Proxies Web Tier 4
6 JSF Form Attribute nicht an Bean übergeben Web Tier 2
A JSF form absenden ohne require validation (andere schon) Web Tier 4
N JSF CommandButton Daten aus anderem Form auslesen Web Tier 3
S Primefaces commandButton in einem Dialog/Form/PanelGrid führt actionListener nicht aus Web Tier 4
L OpenFaces tabbedPane und h:form Web Tier 2
ruutaiokwu action-attribut des jsf h:form-tag überschreiben Web Tier 7
H <form:input > javascript Web Tier 2
L Struts JSTL Form Variable Übermitteln Web Tier 2
P FORM-AUTH - Logout Web Tier 4
N MessageResources von Struts in Form-Bean Web Tier 4
G JSF h:form Tag Login über j_security_check und weiterleiten Web Tier 5
S Facelets Form: Validation abschalten bei Abbrechen-Button Web Tier 2
T Daten aus der Form holen Web Tier 2
U JSP form-Daten (ohne name-Attribut) an Servlet = Problem Web Tier 6
H Java Servlet und HTML Form Web Tier 3
G in validate methode auf form objekte zugreifen Web Tier 3

Ähnliche Java Themen

Neue Themen


Oben