Validierung mittels Struts. Benötige Hilfe.

Status
Nicht offen für weitere Antworten.

gondor

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

Code:
  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>
Code:
  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>
Code:
  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(..)
 
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(..)
 
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.
 
@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?

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

Code:
{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(..)
 
Hm, weiß ich jetzt gar nicht, kann ich mir aber nicht vorstellen... was soll denn passieren, wenn du mehrere Parameter in deiner Fehlermeldung hast?
 
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:
Code:
<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:
Code:
...
errors.required=Das Feld {0} ist verpflichtend
...

und das bundle lang schaut so aus:
Code:
...
orderform.firstname=Vorname
...
 
okay... hat sich erledigt.

habe mit dem Tag

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

mein Problem lösen können.

Danke Euch für die Hilfe,

gondor(..)
 
Status
Nicht offen für weitere Antworten.

Neue Themen


Zurück
Oben