# [Struts] Validierung server-seitig bringt StackOverflowError



## clemson (29. Sep 2005)

Hallo!

Folgendes Problem: Ich habe eine DynaActionForm, welche ich validieren möchte. ich habe also in der form-deklarierung den typ auf "org.apache.struts.validator.DynaValidatorActionForm" geändert.

```
<form-bean name="orderprioritymodform" 
	type="org.apache.struts.validator.DynaValidatorActionForm">
	<form-property name="order_priority_id" type="java.lang.Long" />
	<form-property name="label" type="java.lang.String" />
	<form-property name="order_priorities" 
		type="org.dea.odm.model.OrderPriority[]" />
</form-bean>
```

im action mapping habe ich validate auf true gesetzt.

```
<action path="/orderprioritymod" 
	type="org.dea.odm.struts.actions.OrderPriorityModAction" 
	input="/orderprioritymod.do" name="orderprioritymodform" 
	roles="admin"
	scope="request"
	validate="true">
	<forward name="success" path="screen.orderprioritymod" />
</action>
```

außerdem habe ich das plugin für die validierung in der struts-config hinzugefügt...

```
<plug-in className="org.apache.struts.validator.ValidatorPlugIn" >
	<set-property property="pathnames" value="/WEB-INF/validator-rules.xml, /WEB-INF/validation.xml"/>
	<set-property property="stopOnFirstError" value="false"/>
</plug-in>
```

in der validation.xml habe ich folgenden eintrag:
<?xml version="1.0" encoding="ISO-8859-1" ?>
<!DOCTYPE form-validation PUBLIC
  "-//Apache Software Foundation//DTD Commons Validator Rules Configuration 1.1.3//EN"
  "http://jakarta.apache.org/commons/dtds/validator_1_1_3.dtd">


```
<form-validation>
  <formset>
    <form name="/orderprioritymod">
      <field property="label" depends="required" >
      	<msg name="required" key="errors.required" bundle="lang" />
      	<arg name="required" key="orderpriority.label" bundle="lang" position="0" />
      </field>
    </form>
  </formset>
</form-validation>
```

wenn ich jetzt allerdings die seite aufrufe, dann gehts in eine endlosschleife

```
ApplicationDispatcher[/odm] Servlet.service() for servlet action threw exception
java.lang.StackOverflowError
```

was mache ich denn da falsch? meine vermutung ist, dass er bevor er die seite anzeigt, eine überprüfung macht, ob die eingaben richtig sind (in diesem fall required). und da am anfang das nicht sein kann, macht er eine endlosschleife...


----------



## clemson (29. Sep 2005)

hmm, ich habs jetzt irgendwie zusammen gebracht...

mein nächstes problem ist aber folgendes: ich habe eine seite, auf welcher man einen datenbank-eintrag machen kann (eine neue zeile mit bestimmten wert in die datenbank einfügen). auf der selben seite lasse ich mir die bereits in der tabelle vorhandenen werte auflisten.

ich habe es jetzt mit der validierung so gelöst, dass eine fehlermeldung angezeigt wird, wenn man keinen wert eingegeben hat (depends="required").

das problem ist jetzt nur, dass er von anfang an schon diese fehlermeldung hinschreibt, und er mir die anderen einträge aus der tabelle gar nicht auflistet...


----------



## KSG9|sebastian (29. Sep 2005)

das problem ist bekannt...ich wüsste nur folgende lösung:

überschreib den RequestProcessor und dort ne Methode..ich glaub "processValidation".

darin kannst du dann abfangen, welche formulare validiert werden...(über nen parameter in der struts-config.xml)


----------



## clemson (29. Sep 2005)

KSG9|sebastian hat gesagt.:
			
		

> das problem ist bekannt...ich wüsste nur folgende lösung:
> 
> überschreib den RequestProcessor und dort ne Methode..ich glaub "processValidation".
> 
> darin kannst du dann abfangen, welche formulare validiert werden...(über nen parameter in der struts-config.xml)



also bin ich da nicht der einzige? das ist schon mal gut zu hören 

mal kucken, wie das mit dem überschreiben funktioniert... danke erstmals


----------



## mlange8801 (2. Okt 2005)

Hallo,


```
<action path="/orderprioritymod" 
   type="org.dea.odm.struts.actions.OrderPriorityModAction" 
   input="/orderprioritymod.do" name="orderprioritymodform"
```

input ist der Pfad zu der Ressource an die weitergeleitet wird, wenn ein Fehler auftritt z.B. wenn die validate() Methode einen Fehler zurückgibt.
Wenn Du da die gleiche action wieder aufrufst, dürfte es eine Endlosschleife geben, wenn die Validierung nicht erfolgreich durchlaufen wurde.
Gehts so vielleicht?
<action path="/orderprioritymod" 
   type="org.dea.odm.struts.actions.OrderPriorityModAction" 
   input="/meinFormular.jsp" name="orderprioritymodform"


----------



## clemson (2. Okt 2005)

hmm, ich habs jetzt mal so probiert:

```
<action path="/orderprioritymod" 
	type="org.dea.odm.struts.actions.OrderPriorityModAction" 
	name="orderprioritymodform"
	roles="admin"
	scope="request"
	input="screen.orderprioritymod"
	validate="true">
	<forward name="success" path="screen.orderprioritymod" />
</action>
```
mit dem ergebnis, dass die form beim erstmaligen anzeigen validiert wird...

kann es sein, dass er probleme damit hat, dass ich zum anzeigen des formulars und zum auswerten dieselbe action aufrufe? wenn ja, denn werde ich es mal so probieren, dass zum anzeigen eine andere action verwendet wird, als zum auswerten...


----------

