Jakarta Validation
Java Bean Validation wordt algemeen erkend als de standaard voor het integreren van validatielogica in Java-toepassingen. Het hanteert een uniforme benadering van validatie door ontwikkelaars in staat te stellen domeinmodel eigenschappen te annoteren met declaratieve validatiebeperkingen. Deze beperkingen worden tijdens runtime gehandhaafd, met opties voor zowel ingebouwde als op maat gedefinieerde regels.
webforJ integreert naadloos met Bean Validation via de JakartaValidator
adapter, die robuuste ondersteuning biedt vanaf het begin.
Installatie
Het is noodzakelijk om een compatibele implementatie, zoals Hibernate Validator, in je classpath op te nemen. Als je omgeving deze implementatie niet standaard bevat, kun je deze handmatig toevoegen met de volgende Maven-afhankelijkheden:
<dependency>
<groupId>org.hibernate.validator</groupId>
<artifactId>hibernate-validator</artifactId>
<version>8.0.1.Final</version>
</dependency>
<dependency>
<groupId>org.glassfish.expressly</groupId>
<artifactId>expressly</artifactId>
<version>5.0.0</version>
</dependency>
De JakartaValidator
De JakartaValidator
klasse fungeert als een adapter, die de webforJ binding context verbindt met Jakarta Validation. Deze integratie stelt het gebruik van complexe validatieregels mogelijk via annotaties in de beanklasse.
JakartaValidator
activeren
Om de JakartaValidator
in de hele context te activeren, gebruik je doorgaans de useJakartaValidator
parameter bij het construeren van de BindingContext
.
BindingContext<User> context = new BindingContext<>(User.class, true);
Beperkingen definiëren voor bean-eigenschappen
Annotatie-gebaseerde beperkingen worden direct toegepast binnen de beanklasse om validatievoorwaarden op te geven, zoals geïllustreerd in het onderstaande voorbeeld:
public class Hero {
@NotEmpty(message = "Naam mag niet leeg zijn")
@Length(min = 3, max = 20)
private String name;
@NotEmpty(message = "Onspecificeerde kracht")
@Pattern(regexp = "Fly|Invisible|LaserVision|Speed|Teleportation", message = "Ongeldige kracht")
private String power;
// getters en setters
}
Dergelijke beperkingen zijn net zo effectief als die programmatic tijdens de binding-initialisatie zijn ingesteld, wat zorgt voor consistente validatieresultaten.
Momenteel herkent de JakartaValidator
alleen beperkingen die rechtstreeks zijn toegewezen aan eigenschappen en negeert deze validaties die niet direct aan eigenschappen zijn gekoppeld.