[英]How to validate a date from a Calendar
我已經嘗試了以下代碼(我已經按照一個例子)來測試從日歷中選擇的日期。 如果我的數據庫中不存在該日期,則應向最終用戶顯示驗證錯誤消息。 但是,錯誤不會在<h:message>
,而是記錄到服務器日志中。
視圖:
<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" />
驗證器:
@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();
}
}
}
服務器日志:
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
再次查看您的代碼,您將自己捕獲並在ValidatorException
器中打印ValidatorException
! 您不應該自己捕獲並記錄ValidatorException
。 您應該放手讓JSF捕獲並處理它,以便它可以相應地在消息組件中顯示它。
擺脫驗證器中的try
塊,並將throws
子句添加到validate()
方法中。
@Override
public void validate(FacesContext context, UIComponent component, Object value) throws ValidatorException {
java.util.Date date2 = (java.util.Date) value;
if (validateDate(date2)) {
throw new ValidatorException(new FacesMessage("A valid date")); // Btw: I wonder how that makes sense... That's actually not a validation error.
} else {
throw new ValidatorException(new FacesMessage("date dont figure in the database"));
}
}
除了@Balusc在他的回答中提到的驗證器中的問題之外,你應該使用PrimeFaces組件:
<p:calendar id="date1" value="#{bean.date1}" showOn="button">
<f:validator validatorId="calendarValidator" />
<p:ajax execute="date1" update="calendarmessage" />
</p:calendar>
<p:message id="calendarmessage" for="date1" />
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.