Das Notes Forum

Domino 9 und frühere Versionen => ND8: Entwicklung - XPages => Thema gestartet von: JKo am 29.04.13 - 16:55:53

Titel: ValidateExpression funktioniert nicht
Beitrag von: JKo am 29.04.13 - 16:55:53
Hallo zusammen,

ich habe auf einer XPage zwei Felder. Das erste ist eine Radiogroup, in der das Intervall ausgewählt wird. Wenn hier "monatlich" (Alias 12) ausgewählt wird, dann muss in dem zweiten Feld (id="inputText2) der Monatstag eingegeben werden, das Feld darf dann nicht leer sein. Dazu habe ich bei dem zweiten Feld den folgenden Validator:

    <xp:validateExpression message="Bitte geben Sie den Monatstag ein.">
      <xp:this.expression><![CDATA[#{javascript:
      var interval = getComponent("radioGroupIntervall").getValue();
_dump("interval " + interval);
var val =getComponent("inputText2").getSubmittedValue();
_dump("value " + val);
        if (sessionScope.Intervall == '12' && val == '')
        {
        _dump("validation false");
          return false;
        } else {
        _dump("validation TRUE");
          return true;
        }
      }]]></xp:this.expression>
    </xp:validateExpression>
    </xp:this.validators>

Wenn das zweite Feld nicht leer ist, werden meine Eingaben in das Dokument gespeichert und die _dump in der Server Konsole angezeigt. Wenn ich das zweite Feld leer mache, erscheint keiner der _dump und die Xpage für den Fehler Fall wird geöffnet.

Kann mir bitte jemand einen Tipp geben, wo das Problem liegt.

Gruß Jörg
Titel: Re: ValidateExpression funktioniert nicht
Beitrag von: Sven Hasselbach am 02.05.13 - 02:38:56
Ein Validator wird nur ausgeführt, wenn ein Wert vorhanden ist. Kein Wert, keine Validierung.
Titel: Re: ValidateExpression funktioniert nicht
Beitrag von: JKo am 06.05.13 - 16:46:56
Hallo Sven,

vielen Dank für den Hinweis. Ich habe den Validator jetzt in die RadioGroup verschoben. Aber leider funktioniert es nicht so wie ich mir das vorstelle.

<xp:this.expression><![CDATA[#{javascript:
      var interval = getComponent("radioGroupIntervall").getValue();
var val = getComponent("inputText2").getSubmittedValue();
        if (interval == '12' && (val==null || val = ''))
        {
          _dump("validation false");
          return false;
        } else {
          _dump("validation TRUE");
          return true;
        }
      }]]></xp:this.expression>


Wenn ich in den Monatstag nichts eintrage und auf den Speichern-Button klicke, kommt "validation false" in der Konsole und die View-Page (if update fails) wird angezeigt.

Ich hätte aber gerne, dass die aktuelle Seite weiter angezeigt wird und in dem zugeordneten Display Error Control meine Meldung angezeigt wird.

Was mache ich noch falsch?

Oder alternativ, gibt es ein Beispiel dafür? So eine Validierung ist doch gang und gäbe.

Gruß Jörg

Titel: Re: ValidateExpression funktioniert nicht
Beitrag von: Jens Winkelmann am 06.05.13 - 22:45:52
Auf alle Fälle muss es val == '' statt val = '' heißen.
Titel: Re: ValidateExpression funktioniert nicht
Beitrag von: Sven Hasselbach am 07.05.13 - 11:28:16
@JKo:
Du musst die Navigation-Rule auf der Seite entfernen (bzw. hinterfragen wozu die eigentlich da sind).
Solange die Regel aktiv ist, wird immer auf diese XPage umgeleitet, sobald ein Validierungsfehler auftritt.

Titel: Re: ValidateExpression funktioniert nicht
Beitrag von: JKo am 08.05.13 - 16:08:18
Hallo Sven,

super, danke für den Tipp. Jetzt funktioniert es.

Gruss Jörg