2016-07-28 24 views
1

Ich habe zwei Felder in meinem Formular, die ich bedingt validiert werden möchte (wenn ein anderes Feld einen bestimmten Wert hat, möchte ich es validiert, andernfalls möchte ich es nicht validiert).Bedingte Validierung in Struts2

Zunächst wollte ich auf dem Feld Ausdrücke, dies zu tun (wie ähnliche Fragen vorschlagen), aber ich brauche mehr als das, was (glaube ich) EL Angebote:

Hier meine aktuelle xml ist:

<field name="effectiveDate"> 
    <field-validator type="fieldexpression"> 
     <param name="expression">childReason not in {1} or effectiveDate.length() gt 9</param> 
     <message key="validation.effectiveDate.entered" /> 
    </field-validator> 
</field> 

Das funktioniert ... aber anstatt eine einfache Überprüfung für Feldlänge, möchte ich Regex verwenden, um sicherzustellen, dass das Datum gültig ist. Außerdem möchte ich sicherstellen, dass sie kein Datum in der Zukunft oder ein Datum eingeben, das ein Jahr älter als das heutige Datum ist.

Grundsätzlich möchte ich einen benutzerdefinierten Validator verwenden oder meine EL Ausdruck aufrufen eine Methode, wo ich diese Dinge überprüfen kann.

+0

Validieren Sie in Aktion mit 'validateXXX' Methoden oder erstellen Sie einen benutzerdefinierten Validator. –

+0

@AleksandrM möchte die Antwort so machen, dass ich akzeptieren kann? Vielen Dank. – Othya

Antwort

1

Wenn Sie Aktion implementiert Validateable Schnittstelle (was es tut, wenn Sie ActionSupport sind erstreckt) und verwendet Stack mit validation Abfangjäger, dann können Sie validateXXX() Methoden verwenden, wobei XXX ein Name der Methode ist, dass Sie überprüfen möchten.

public void validateSave() { 
    // some is some complex conditional validation :) 
    if (some) { 
     addFieldError("effectiveDate", "Wrong date!") 
    } 
} 

Eine weitere Option ist die Erstellung eines benutzerdefinierten Validators.

+0

Während Struts diese Art der Validierung anbieten kann, führt dies manchmal zu einer Duplizierung von Validierungsregeln, abhängig von bestimmten Anwendungsfällen. – Naros

+0

@Naros Und? Es bedeutet nicht, dass du es nicht benutzen kannst. –