Comment valider une date à partir du Calendrier
J'ai essayé le code suivant (je l'ai suivie un exemple) pour tester une date déterminée à partir d'un calendrier. Si la date n'existent pas dans ma base de données, puis un message d'erreur de validation doit être affichée à l'utilisateur final. Cependant, l'erreur ne se retrouvent pas dans les <h:message>
, au lieu de cela, il est enregistré dans le journal du serveur.
Vue:
<p:calendar id="date1" value="#{bean.date1}" showOn="button">
<f:validator validatorId="calendarValidator" />
<f:ajax execute="date1" render="calendarmessage" />
</p:calendar>
<h:message id="calendarmessage" for="date1" />
Validator:
@FacesValidator("calendarValidator")
public class CalendarValidator implements Validator{
@Override
public void validate(FacesContext context, UIComponent component, Object value) {
java.util.Date date2 = (java.util.Date) value;
try {
if (validateDate(date2)) {
throw new ValidatorException(new FacesMessage("A valid date"));
} else {
throw new ValidatorException(new FacesMessage("date dont figure in the database"));
}
} catch(Exception e) {
e.printStackTrace();
}
}
}
Journal du serveur:
INFO: date invalide
GRAVE: javax.faces.validator.ValidatorException: date dont figure in the database
at DAOKPI.CalendarValidator.validate(CalendarValidator.java:60)
at javax.faces.component.UIInput.validateValue(UIInput.java:1149)
at javax.faces.component.UIInput.validate(UIInput.java:967)
at javax.faces.component.UIInput.executeValidate(UIInput.java:1233)
at javax.faces.component.UIInput.processValidators(UIInput.java:698)
at javax.faces.component.UIComponentBase.processValidators(UIComponentBase.java:1214)
at javax.faces.component.UIComponentBase.processValidators(UIComponentBase.java:1214)
at javax.faces.component.UIForm.processValidators(UIForm.java:253)
at javax.faces.component.UIComponentBase.processValidators(UIComponentBase.java:1214)
at javax.faces.component.UIComponentBase.processValidators(UIComponentBase.java:1214)
at javax.faces.component.UIViewRoot.processValidators(UIViewRoot.java:1172)
at com.sun.faces.lifecycle.ProcessValidationsPhase.execute(ProcessValidationsPhase.java:76)
at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101)
at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:118)
at javax.faces.webapp.FacesServlet.service(FacesServlet.java:409)
at org.apache.catalina.core.StandardWrapper.service(StandardWrapper.java:1
- avez-vous de débogage ou de l'utilisation d'un point d'arrêt? Est-ce que votre validateDate fonction retourne jamais vrai? ........vous pouvez poster votre code pour cela?
- vous pour la réponse ,j'ai mis à jour mon post
- Pour clarifier, vous vous demandez pourquoi aucun message n'a été renvoyée à l'utilisateur? Plutôt le fait que l'exception correcte semble être pris?
Vous devez vous connecter pour publier un commentaire.
Regardez votre code une fois de plus, vous êtes capture et d'impression de la
ValidatorException
à l'intérieur du programme de validation vous-même! Vous ne devriez pas l'attraper et le journal de laValidatorException
vous-même. Vous devez vous laisser aller et de laisser JSF attraper et de les traiter afin qu'il puisse l'afficher dans le composant de message en conséquence.Se débarrasser de la
try
bloc dans le programme de validation et d'ajouter de lathrows
clausevalidate()
méthode.<p:ajax>
.Outre le problème dans le programme de validation que @Balusc mentionne déjà dans sa réponse, vous devez utiliser PrimeFaces-composants consitently: