# Formulareingaben gezielt aus Session löschen



## Rumborak (21. Jun 2006)

Hallo zusammen!

Ich benutze in einer Struts-Anwendung ein DynaValidatorForm. Die Eingaben werden zunächst geprüft und dann gesendet, falls alles korrekt ist - funktioniert soweit prima!

Jetzt möchte ich aber die Benutzereingaben nach dem Versenden aus der Session entfernen. Bis jetzt hat das nur mit *session.invalidate()* bzw. *session.removeAttribute(mapping.getAttribute())* geklappt, wobei ich noch nicht genau weiß, was der zweite Befehl genau macht.

Ich will auf keinen Fall die gesamte Session zurücksetzen - nur die Formulareingaben löschen - wie stelle ich das am besten an?

Danke schonmal für die Hilfe!

PS: Natürlich habe ich *session.removeAttribute("param")* auch schon probiert!


----------



## clemson (21. Jun 2006)

versuch mal in der struts-config das initial attribut bei der definition der dynaactionform elemente zu setzen...


was willst du genau machen? ich habs irgendwie nicht ganz verstanden. der benutzer gibt werte in einer actionform ein, submitted und dann werden diese daten in der session gespeichert, oder wie?


----------



## Rumborak (21. Jun 2006)

Naja, das Ganze ist eine kleine Beispielanwendung. Auf einer fiktiven Homepage kann der Kunde einen personalisierten Newsletter abonnieren bzw. mehrere verschiedene Newsletter - ganz wie Du willst. Einzugeben sind die eMail-Adresse. Die Wahl des Newsletters erfolgt über Radio-Buttons (ja/nein).

Der Abschnitt in der struts-config.xml sieht so aus:
	
	
	
	





```
<form-bean name="subscriptionForm" type="org.apache.struts.validator.DynaValidatorForm">
	<form-property name="abo_technology" type="java.lang.String" initial="" />
	<form-property name="abo_products" type="java.lang.String" initial="" />
	<form-property name="abo_jobs" type="java.lang.String" initial="" />
	<form-property name="email" type="java.lang.String" initial="" />
</form-bean>
```
Dazu das Action-Mapping:
	
	
	
	





```
<action attribute="subscriptionForm" input="page.subscription" name="subscriptionForm" path="/subscription" type="de.fhf.struts.action.SubscriptionAction">
	<forward name="showSubscription" path="page.subscription" redirect="true" />
	<forward name="showConfirmation" path="page.confirmation" redirect="true" />
	<forward name="showError" path="page.error" redirect="true" />
</action>
```
Über den struts-validator werden die Eingaben überprüft. Es soll außerdem demonstriert werden, wie man mit Struts die Werte in der Session speichern kann - alles kein Problem.

Jetzt hätte ich halt gerne, daß das Formular nach dem erfolgreichen Absenden der Daten auch wieder zurückgesetzt wird, damit andere Benutzer ggf. ihre Eingaben machen können. Wie gesagt, wenn ich die Session komplett lösche geht´s - falls das Formular aber Bestandteil einer größeren Web-Applikation ist, in der noch mehr Daten in der Session abgelegt werden, macht es natürlich keinen Sinn, alles zu löschen.

Ach ja, hier noch die Action:
	
	
	
	





```
public class SubscriptionAction
		extends Action
{
	public ActionForward execute( ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response )
			throws Exception
	{
		HttpSession session = request.getSession();
		DynaValidatorForm input = (DynaValidatorForm) form;
		String userEmail = input.getString( "email" );
		String userAboTechnology = input.getString( "abo_technology" );
		String userAboProducts = input.getString( "abo_products" );
		String userAboJobs = input.getString( "abo_jobs" );

/*
		session.setAttribute("user", null);
		session.setAttribute("abo_technology", null);
		session.setAttribute("abo_products", null);
		session.setAttribute("abo_jobs", null);
*/
		//input.reset(mapping, request);

		session.removeAttribute("email");
		session.removeAttribute("abo_technology");
		session.removeAttribute("abo_products");
		session.removeAttribute("abo_jobs");

		session.removeAttribute(mapping.getAttribute());
		//session.invalidate();

		return mapping.findForward( "showConfirmation" );
	}

}
```


----------



## clemson (21. Jun 2006)

hmm, willst du jetzt die daten aus dem formular raushaben oder aus der session?

wenn du sie aus dem formular haben willst, dann müsste deine

```
input.reset(mapping, request);
```
genügen.


du könntest auch den scope deiner actionform für deine action festlegen, vielleicht hilft dir das weiter...


```
<action attribute="subscriptionForm" input="page.subscription" name="subscriptionForm" path="/subscription" type="de.fhf.struts.action.SubscriptionAction" scope="request" >
   <forward name="showSubscription" path="page.subscription" redirect="true" />
   <forward name="showConfirmation" path="page.confirmation" redirect="true" />
   <forward name="showError" path="page.error" redirect="true" />
</action>
```


----------



## Rumborak (22. Jun 2006)

...also mit
	
	
	
	





```
session.removeAttribute( mapping.getAttribute() );
```
geht es! Alles Andere hat nicht funktioniert ... so ganz versteh´ ich das zwar noch nicht - trotzdem mal danke!


----------

