# Validierung mittels Struts. Benötige Hilfe.



## gondor (30. Mai 2006)

Hallo!

Ich habe eine Frage zur Validierung mittels Struts.

Mein Formular hat einige 'Pflichtfelder'.

Nun möchte ich für das Feld, wo die Validierung fehlgeschlagen ist, eine Anzeige haben. Beispielsweise
sollte bei fehlgeschlagener Validierung für das Feld 'E-Mail' der Hinweis kommen: 'Bitte überprüfen Sie
Ihre Mail-Adresse' oder wenn ein Pflichtfeld leer gelassen wurde ein Hinweis an das Feld: 'Dieses Feld
müssen Sie ausfüllen' usw...

Wie kann ich das realisieren?

Hier mein bisheriger Stand:


```
validation.xml:
 
  <form name="orderform">
      <field property="firstname" depends="required"><arg0 key="orderform.firstname" /></field>
      <field property="lastname" depends="required"><arg0 key="orderform.lastname" /></field>
      <field property="street" depends="required"><arg0 key="orderform.street" /></field>
      <field property="zip" depends="required"><arg0 key="orderform.zip" /></field>
      <field property="city" depends="required"><arg0 key="orderform.city" /></field>
      <field property="phone_private" depends="required"><arg0 key="orderform.phone_private" /></field>
      <field property="ReplyTo" depends="required, email"><arg0 key="orderform.email" /></field>
  </form>
```


```
struts-config.xml:
 
  <form-bean name="orderform" type="org.apache.struts.validator.DynaValidatorForm">
    <form-property name="firstname" type="java.lang.String" />
    <form-property name="lastname" type="java.lang.String" />
    <form-property name="street" type="java.lang.String" />
    <form-property name="zip" type="java.lang.String" />
    <form-property name="city" type="java.lang.String" />
    <form-property name="phone_private"type="java.lang.String" />
    <form-property name="ReplyTo" type="java.lang.String" />
  </form-bean>
 
  <message-resources parameter="i18n.validation_messages" />
 
  <plug-in className="org.apache.struts.validator.ValidatorPlugIn">
    <set-property property="pathnames" value="/WEB-INF/validator-rules.xml,/WEB-INF/validation.xml"/>
  </plug-in>
```


```
Auszug aus dem Formular (Beispiel: E-Mailfeld)
 
  <tr>
    <td>
      <bean:message key="orderform.email"/> :
    </td>
    <td>
      <html:text property="ReplyTo" size="30" tabindex="8" />(Pflichtfeld)

    </td>
  </tr>
```
-----------------------

Danke für Hilfe,

gondor(..)


----------



## clemson (30. Mai 2006)

vielleicht helfen dir diese beiden links weiter...

www.oracle.com/technology/oramag/oracle/04-jan/o14dev_struts.html
javaboutique.internet.com/tutorials/Struts11Val/index-12.html


----------



## gondor (30. Mai 2006)

hi clemson!

kurz eine andere Frage:

Bekomme für <bean:message key="errors.required" /> leider 'null' zurück, obwohl das bundle 
doch erkannt werden sollte. Hast Du eine Idee, wie ich dort die Ausgabe bekomme? 

im Bundle steht:

errors.required = Die Angabe von {0} ist erforderlich.

Ausgabe:

Die Angabe von null ist erforderlich.

Danke für Hilfe,

gondor(..)


----------



## Jockel (30. Mai 2006)

Naja, du musst ja auch mittels Parameter mitteilen, was du ausgegeben haben willst:
<bean:message key="errors.required" arg0="Vorname"/>

sollte dann in deinem Beispiel

Die Angabe von Vorname ist erforderlich. 

ausgeben.


----------



## gondor (30. Mai 2006)

@clemson

leider habe ich zu deinen Links nichts Brauchbares gefunden. Zumindest stand dort nichts, 

@jockel!

hm... immer noch ratlos. Sollte er das Argument ({0}) in der Validierungsklasse nicht von selber setzen?


```
...
errors.add(field.getKey(), Resources.getActionMessage(request, va, field));
...
```

ich muss es doch nur mit <bean:message key="errors.required" /> auslesen, oder?

außerdem werden die Argumente in der Validation.xml mit angegeben:

...<arg0 key="orderform.lastname" />...

also ein ${requestScope['org.apache.struts.action.ERROR']} ergibt folgendes:


```
{lastname=[errors.required[Nachname, null, null, null]], ReplyTo=[errors.required[E-Mail, null, null, null]], street=[errors.required[Strasse, null, null, null]], phone_private=[errors.required[Telefon (privat), null, null, null]], agb=[errors.required[AGB, null, null, null]], zip=[errors.required[PLZ, null, null, null]], city=[errors.required[Ort, null, null, null]]}
```

Danke für Hilfe,

gondor(..)


----------



## Jockel (30. Mai 2006)

Hm, weiß ich jetzt gar nicht, kann ich mir aber nicht vorstellen... was soll denn passieren, wenn du mehrere Parameter in deiner Fehlermeldung hast?


----------



## clemson (30. Mai 2006)

probier mal, in deiner validation.xml, das bundle anzugeben, in welchem deine Ort, Vorname,... definiert sind (falls du die error messages überhaupt von den anderen language keys getrennt hast).

in etwa so:

```
<field property="firstname" depends="required">
	<msg name="required" key="errors.required" bundle="err" />
	<arg name="required" key="orderform.firstname" bundle="lang" position="0" />
</field>
```

und dein bundle err schaut so aus:

```
...
errors.required=Das Feld {0} ist verpflichtend
...
```

und das bundle lang schaut so aus:

```
...
orderform.firstname=Vorname
...
```


----------



## gondor (31. Mai 2006)

okay... hat sich erledigt.

habe mit dem Tag


```
<html:errors property="lastname" />
```

mein Problem lösen können.

Danke Euch für die Hilfe,

gondor(..)


----------

