# Struts 2 Iterator Validation



## Lodesh (3. Jun 2010)

Hallo Zusammen,

ich habe ein Problem mit Struts 2 (bin neu dabei).

Gegeben ist folgende Situation:

Ich habe ein Formular aus einer Liste erstellt. Diese Liste hält Objekte mit Informationen für das Formular. Jedes Objekt hat quasi ein Attribut "type", ein Attribut "description", etc.

Also das Formular ist wiefolgt erstellt:


```
<s:form namespace="/" action="sendForm.action " method="post">
	<s:iterator value="object.list">
		<s:label value="%{description}:    "/><s:textfield name="%{name}" id="%{name}" title="%{description}"/>		
	</s:iterator>
	<input type="submit" id="submitButton" name="submit" value="Submit" accesskey="1"/>
</s:form>
```

So, jetzt gibt es auch noch ein Attribut required.

Meine Frage:
Wie kann ich das validieren? Sprich, wie überprüfe ich, ob das Feld nicht leer ist, wenn es required ist. Wie überprüfe ich, ob der type (String, int, etc) korrekt ist?

Auf statischen Formularen ist das ja kein Problem, da kann ich ja einfach auf die Namen zugreifen, aber wie sieht das bei dynamischen Formularen aus?

Gruß
Lodesh


----------



## gman (3. Jun 2010)

Hi,

man kann eine "validate"-Methode überschreiben in der man dann die Objekte auf dem Value-Stack
überprüfen kann. Musste mal auf der Struts-Homepage nach "Validierung" suchen. Ich selber nutze
lieber die Validierung durch Annotationen, aber die hilft dir in diesem Fall nicht viel.

Edit:

Nur am Rande, aber müsste es nicht eher so aussehen:
[XML=3]
        <s:label value="%{description}:    " for="%{name}"/><s:textfield name="%{name}" id="%{name}"/> 
[/XML]


----------



## Lodesh (4. Jun 2010)

Hi,

danke schon einmal für deine Antwort.

Wie die Validierung ansich funktioniert ist mir bekannt - allerdings wenn ich den Debugger in meiner Validierungsmethode anschmeiße, dann sind die Informationen, die ich vorher eingegeben habe nirgendwo vorhanden.

Ich muss ja normalerweise dort eine Variable haben, die genau so heißt wie in der zugehörigen JSP. In meiner JSP gibt es aber beliebig viele Namen und wie genau die aussehen weiß ich auch nicht.

Da liegt mein Problem 

Gruß
Lodesh


----------



## gman (4. Jun 2010)

Hmm,

du iterierst also über etwas und bekommst dann mehrere Zeilen von den Label/Textfield-Paaren?
Da musst du wohl dem Textfield immer die gleiche ID und den Namen vergeben, dann landen
die Inhalte auf dem Value-Stack in einer List<String>.

[XML]
<s:form namespace="/" action="sendForm.action " method="post">
    <s:iterator value="object.list">
        <s:label value="%{description}:" for="nameTextfield"/>
        <s:textfield name="nameTextfield" id="nameTextfield" value="%{name}"/>     
    </s:iterator>
    <input type="submit" id="submitButton" name="submit" value="Submit" accesskey="1"/>
</s:form>
[/XML]

dann brauchst du in der Actionklasse:


```
private List<String> nameTextfield;
```

mit den entsprechenden Getter/Setter-Methoden.


----------



## Lodesh (5. Jun 2010)

Super, danke so hats funktioniert!


----------

