Ich möchte eine kleine benutzerdefinierte Validierung mit JSR-303 durchführen javax.validation
.
Ich habe ein Feld. Und wenn ein bestimmter Wert in dieses Feld eingegeben wird, möchte ich verlangen, dass einige andere Felder dies nicht tun null
.
Ich versuche das herauszufinden. Ich bin mir nicht sicher, wie ich das nennen würde, um eine Erklärung zu finden.
Jede Hilfe wäre dankbar. Ich bin ziemlich neu darin.
Im Moment denke ich an eine benutzerdefinierte Einschränkung. Ich bin mir jedoch nicht sicher, wie ich den Wert des abhängigen Felds innerhalb der Anmerkung testen soll. Grundsätzlich bin ich mir nicht sicher, wie ich über die Annotation auf das Panel-Objekt zugreifen soll.
public class StatusValidator implements ConstraintValidator<NotNull, String> {
@Override
public void initialize(NotNull constraintAnnotation) {}
@Override
public boolean isValid(String value, ConstraintValidatorContext context) {
if ("Canceled".equals(panel.status.getValue())) {
if (value != null) {
return true;
}
} else {
return false;
}
}
}
Es ist das, panel.status.getValue();
was mir Ärger macht. Ich bin mir nicht sicher, wie ich das erreichen soll.
Object
). In diesem Fall müssen Sie nicht einmal Reflection verwenden, um die Werte abzurufen. In diesem Fall wird der Validator jedoch weniger allgemein. 2) Verwenden SieBeanWrapperImp
Spring Framework (oder andere Bibliotheken) und seinegetPropertyValue()
Methode. In diesem Fall können Sie einen Wert als erhaltenObject
und in einen beliebigen Typ umwandeln.Definieren Sie eine Methode, die auf true validiert werden muss, und setzen Sie die
@AssertTrue
Anmerkung oben drauf:Die Methode muss mit 'is' beginnen.
quelle
@AssertTrue(message="La reference doit etre un URL") public boolean isReferenceOk() { return origine!=Origine.Evolution||reference.contains("http://jira.bcaexpertise.org"); }
Und das in meinem JSP:<th><form:label path="reference"><s:message code="reference"/></form:label></th><td><form:input path="reference" cssErrorClass="errorField"/><br/><form:errors path="isReferenceOk" cssClass="error"/></td>
Aber es wirft einen Fehler.Sie sollten benutzerdefinierte verwenden
DefaultGroupSequenceProvider<T>
:ConditionalValidation.java
MyCustomFormSequenceProvider.java
MyCustomForm.java
Siehe auch verwandte Fragen zu diesem Thema .
quelle
getValidationGroups(MyCustomForm myCustomForm)
Methode übergeben. Könnten Sie hier möglicherweise helfen? : stackoverflow.com/questions/44520306/…Hier ist meine Meinung dazu, ich habe versucht, es so einfach wie möglich zu halten.
Die Schnittstelle:
Validierungsimplementierung:
Verwendung:
Mitteilungen:
quelle
Ein anderer Ansatz wäre, einen (geschützten) Getter zu erstellen, der ein Objekt zurückgibt, das alle abhängigen Felder enthält. Beispiel:
StatusAndSomethingValidator kann jetzt auf StatusAndSomething.status und StatusAndSomething.something zugreifen und eine abhängige Prüfung durchführen.
quelle