Announcement

Collapse
No announcement yet.

Properties leer nach Validierung

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Properties leer nach Validierung

    <p>Hallo zusammen!</p>
    <p>
    Ich habe ein kleines Problem beim Validieren mit dem Struts Validator:
    </p>
    <p>
    Ich validiere eine Form mit dem Validator. Sie beinhaltet 4 Felder:
    </p>
    <PRE>
    &lt;form-bean name="meineForm" type="meineForm"&gt;
    &lt;form-property name="feld1" type="java.lang.String" /&gt;
    &lt;form-property name="feld2" type="java.lang.String" /&gt;
    &lt;form-property name="feld3" type="java.lang.String" /&gt;
    &lt;form-property name="feld4" type="java.lang.String" /&gt;
    &lt;/form-bean&gt;
    </PRE>
    <p>
    In der zugehörigen <b>validator.xml</b> wird ein Feld als <i>required</i> definiert:
    </p>
    <PRE>
    &lt;form name="qmForm"&gt;
    &lt;field property="feld1" depends="required,&gt;
    &lt;arg0 key="form.feld1"/&gt;
    &lt;/field&gt;
    &lt;field property="feld2" depends="required,float"&gt;
    &lt;arg0 key="form.feld2"/&gt;
    &lt;/field&gt;
    &lt;field property="feld3" depends="float"&gt;
    &lt;arg0 key="form.feld3"/&gt;
    &lt;/field&gt;
    &lt;field property="feld4" depends="float"&gt;
    &lt;arg0 key="form.feld4"/&gt;
    &lt;/field&gt;
    &lt;/form&gt;
    </PRE>
    <p>
    Die Form ist von <b>org.apache.struts.validator.ValidatorForm</b> abgeleitet und eine vollkomen unspektakuläre Bean. Sie ist zudem im <b>request</b> Scope definiert:</p>
    <pre>
    &lt;action
    attribute="meineForm"
    input="/eingabe.jsp"
    name="meineForm"
    path="/eingabe"
    scope="request"
    type="meineAction"&gt;
    &lt;forward name="success"
    path="/weiter.jsp" /&gt;
    &lt;/action&gt;
    </pre>
    <p>
    Ich habe jetzt das Problem, dass bei abgeschaltetem JavaScript, also nur bei serverseitier Validierung, die Felder der Eingabemaske geleert werden. Bei obigem Beispiel heißt das: Wenn ich <I>feld1</I> leer lasse, aber die anderen korrekt fülle, wird mir zwar - korrekterweise - eine Fehlermeldung ausgegeben, aber die Felder, die gefüllt waren, sind leer.</p>
    <p>Das ist aber nicht ganz so schön, denn die Felder enthalten teilweise recht langen Text, und ich möchte meinen Benutzern nicht zumuten, die Daten bei einem Tippfehler alle neu eingeben zu müssen... Hat da jemand eine Idee???</p>
    <p>Gruß, Jörg</p>

  • #2
    hallo,

    mit den validator habe ich auch nicht so viel erfahrung, aber ich könnte mir vorstellen du bildest eine subklasse von org.apache.struts.validator.ValidatorForm und speichert die werte zwischen, dann validierst du das form und schreibst sie dann zurück und schickst das ganze an den aufrufer wieder zurück

    Comment


    • #3
      Hallo,

      Die Klasse ist natürlich von ValidatorForm abgeleitet...

      Das Problem ist aber, dass die eingegebenen Werte schon gespeichert werden (der Debugger hält bei einem Breakpoint auf der Setter Methode).

      Aber die entsprechende Getter Methode wird anschließend nicht mehr aufgerufen, sprich: Die Werte werden auf der Input Seite gar nicht mehr abgerufen...

      Gruß, Jör

      Comment


      • #4
        Hallo,

        Klingt mysteriös. Mit der Tatsache das es eine ValidatorForm ist, hat es höchstwahrscheinlich nichts zu tun. Die verhält sich genau wie eine normale Form, abgesehen von der generischen validate-Methode. Ev. ist an der Definition der relevanten actions in der struts-config was falsch oder auf der JSP stimmt was nicht. Werden denn die getter beim ersten Aufruf der eingabe.jsp aufgerufen? Über welche Action läuft der erste Aufruf von eingabe.jsp?

        Gruß,

        Alwi

        Comment


        • #5
          Hallo Alwin!

          Interessante Frage. Beim Testen habe ich festgestellt, dass der Getter auch beim ersten Aufruf nicht aufgerufen wird...

          Der erste Aufruf erfolgt per &lt;a href="..."&gt; usw. und nicht über eine Action. Mal sehen, ob ich in der Richtung weiterkomme...

          Erstmal jedenfalls vielen Dank!

          Jör

          Comment


          • #6
            Hallo zusammen!

            Oh Mann. Die Antwort war viel einfacher.

            Die JSPs waren von einem Kollegen erstellt worden und der hatte überall <b>value=""</b> eingefügt - warum auch immer.

            Klar, dass dann der Getter nie aufgerufen wird.

            Aber dennoch Danke für die Tipps!

            Gruß, Jör

            Comment

            Working...
            X