# [WICKET] clean form input trotz AjaxSubmitLink



## hrbaer (9. Feb 2011)

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:

```
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 (9. Feb 2011)

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


----------



## Gelöschtes Mitglied 6946 (10. Feb 2011)

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 (11. Feb 2011)

ex'ratt hat gesagt.:


> 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:

```
(...)
try {
  pm.makePersistent( antwort );
  target.addComponent( feedback );
  setResponsePage( SayHello.class );
  modal.show( target );
} 
(...)
```


----------



## Gelöschtes Mitglied 6946 (13. Feb 2011)

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.


----------



## hrbaer (14. Feb 2011)

Danke für die Hilfe - das Problem hat sich inzwischen aber geklärt. target.addComponent( form ) löst das Problem...


----------



## Gelöschtes Mitglied 6946 (14. Feb 2011)

Das meinte ich in meinem ersten Post  Freut mich, dass es jetzt klappt


----------

