Constraint bean violation while...
Résolu/Fermé
adamsjilal
Messages postés
46
Date d'inscription
lundi 14 mars 2016
Statut
Membre
Dernière intervention
29 avril 2018
-
Modifié le 25 avril 2017 à 18:31
adamsjilal Messages postés 46 Date d'inscription lundi 14 mars 2016 Statut Membre Dernière intervention 29 avril 2018 - 30 avril 2017 à 10:36
adamsjilal Messages postés 46 Date d'inscription lundi 14 mars 2016 Statut Membre Dernière intervention 29 avril 2018 - 30 avril 2017 à 10:36
A voir également:
- Bean validation constraint(s) violated while executing automatic bean validation on callback event:'prepersist'. please refer to embedded constraintviolations for details.
- Excel validation des données liste - Guide
- Downloader for pc - Télécharger - Téléchargement & Transfert
- Bash do while ✓ - Forum Shell
- Qwerty to azerty - Guide
- Mb to mo ✓ - Forum Matériel & Système
2 réponses
KX
Messages postés
16754
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
25 novembre 2024
3 020
25 avril 2017 à 18:50
25 avril 2017 à 18:50
Bonjour,
Dans ton code tu as des
Par exemple
Si une ou plusieurs contraintes ne sont pas respectées le programme va lever une erreur de type
Voir https://docs.oracle.com/javaee/7/api/javax/validation/ConstraintViolationException.html
Voici comment récupérer les "embedded ConstraintViolations for details" :
Dans ton code tu as des
import javax.validation.constraints.*dont tu te sers pour ajouter des contraintes à tes valeurs.
Par exemple
@Size(min = 1, max = 255)impose que le
String nomait entre 1 et 255 caractères (si le nom est vide, ce n'est pas bon).
Si une ou plusieurs contraintes ne sont pas respectées le programme va lever une erreur de type
javax.validation.ConstraintViolationException.
Voir https://docs.oracle.com/javaee/7/api/javax/validation/ConstraintViolationException.html
Voici comment récupérer les "embedded ConstraintViolations for details" :
try { // ... } catch (ConstraintViolationException e) { Set<ConstraintViolation<?>> embeddedConstraintViolations = e.getConstraintViolations(); for (ConstraintViolation details : embeddedConstraintViolations) { String message = details.getMessage(); System.err.println(message); } throw e; }
adamsjilal
Messages postés
46
Date d'inscription
lundi 14 mars 2016
Statut
Membre
Dernière intervention
29 avril 2018
26 avril 2017 à 10:47
26 avril 2017 à 10:47
Bonjour KX,
j'ai essayé d'inserer le bloc trycatch pour lever une exception dans ma methode qui enregistrait un fournisseut du coup j'ai toujours le meme soucie
voici ma methode apres l'insertion :
et d'autre part j'ai eu une methode qui permet de verifier l'exactitude des element ou les propriéte a inserer et la voila :
mais le problem dans ce code c'est dans mon cas il m'affiche une erreur a la ligne ou j'ai mit en commentaire double slashe et il dit de creer une class jsfutil dans le package dao donc pouvez m'explique pour cela c'est produit pour moi?
j'ai essayé d'inserer le bloc trycatch pour lever une exception dans ma methode qui enregistrait un fournisseut du coup j'ai toujours le meme soucie
voici ma methode apres l'insertion :
public String createFournisseur() {
try {
this.fournisseurFacade.create(fournisseur);
this.fournisseur = new Fournisseur();
FacesContext.getCurrentInstance().addMessage(null, new FacesMessage("Enrégistrement succes"));
} catch (ConstraintViolationException e) {
Set<ConstraintViolation<?>> embeddedConstraintViolations = e.getConstraintViolations();
for (ConstraintViolation details : embeddedConstraintViolations) {
String message = details.getMessage();
System.err.println(message);
}
throw e;
}
return null;
}
et d'autre part j'ai eu une methode qui permet de verifier l'exactitude des element ou les propriéte a inserer et la voila :
private boolean constraintValidationsDetected(T entity) {
ValidatorFactory factory = Validation.buildDefaultValidatorFactory();
Validator validator = factory.getValidator();
Set<ConstraintViolation<T>> constraintViolations = validator.validate(entity);
if (constraintViolations.size() > 0) {
Iterator<ConstraintViolation<T>> iterator = constraintViolations.iterator();
while (iterator.hasNext()) {
ConstraintViolation<T> cv = iterator.next();
System.err.println(cv.getRootBeanClass().getName() + "." + cv.getPropertyPath() + " " + cv.getMessage());
// JsfUtil.addErrorMessage(cv.getRootBeanClass().getSimpleName() + "." + cv.getPropertyPath() + " " + cv.getMessage());
}
return true;
}
else {
return false;
}
}
mais le problem dans ce code c'est dans mon cas il m'affiche une erreur a la ligne ou j'ai mit en commentaire double slashe et il dit de creer une class jsfutil dans le package dao donc pouvez m'explique pour cela c'est produit pour moi?
KX
Messages postés
16754
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
25 novembre 2024
3 020
26 avril 2017 à 18:41
26 avril 2017 à 18:41
" j'ai toujours le meme soucie "
C'est normal, le code que j'ai fait, tel que tu l'as rajouté fait un
Remarque : le but n'est pas d'empêcher cette exception de se produire, car elle est normale, mais plutôt de comprendre pourquoi tu as une violation à ce moment là, et comment empêcher que cela se produise (probablement par des contrôles de surface).
C'est normal, le code que j'ai fait, tel que tu l'as rajouté fait un
throw e;donc s'il y avait une exception on continuera de l'avoir, cependant ce qui est intéressant c'est l'affichage du message de violation qu'il doit y avoir en plus.
Remarque : le but n'est pas d'empêcher cette exception de se produire, car elle est normale, mais plutôt de comprendre pourquoi tu as une violation à ce moment là, et comment empêcher que cela se produise (probablement par des contrôles de surface).
adamsjilal
Messages postés
46
Date d'inscription
lundi 14 mars 2016
Statut
Membre
Dernière intervention
29 avril 2018
>
KX
Messages postés
16754
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
25 novembre 2024
26 avril 2017 à 19:02
26 avril 2017 à 19:02
Je comprend tout a fait votre sens mais c'est comment avoir les exception et par ou elles ont affichés ce que je cherche c'est j'ai simplement de stack trace qui apparait seul dont le seul est "Bean Validation constraint(s) violated while executing Automatic Bean Validation on callback event:'prePersist'. Please refer to embedded ConstraintViolations for details."
KX
Messages postés
16754
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
25 novembre 2024
3 020
26 avril 2017 à 19:11
26 avril 2017 à 19:11
Tu dois également avoir le
Tu peux également mettre un
System.err.println(message);dans tes logs, ou sinon c'est que le try/catch est mal placé...
Tu peux également mettre un
throw new IllegalStateException(message, e);dans ton catch, mais tu n'auras que la première erreur de validation dans la boucle, pas les suivantes s'il y en a d'autres.
adamsjilal
Messages postés
46
Date d'inscription
lundi 14 mars 2016
Statut
Membre
Dernière intervention
29 avril 2018
30 avril 2017 à 10:36
30 avril 2017 à 10:36
apres une longue travail, j'ai enfin trouvé la solution. pour mon cas le problem etait que je voulait enregistrer un champs vide avec nulll avec que dans la base de données cette champs etait declaré not null. dans ma entité j'ai simplement enlever le @notNull()
et ca a marcher. KX je vous remercie infiniment de m'orienter et de se donner le temps pour m'aider encor merci.
et ca a marcher. KX je vous remercie infiniment de m'orienter et de se donner le temps pour m'aider encor merci.