我在使用 primefaces 日历时遇到了类似的问题。
虽然设置了pattern="dd.MM.yyyy" 模式,但它接受两位数的日期。就像20.06.12 将在日历弹出窗口中显示为20.06.2012 误导用户认为日期被正确识别。但实际上已经设定了第 12 年。
无论如何,我最终在<p:calendar> 中设置了一个<f:validator>,如下所示:
<p:calendar value="#{abschnittDView.bogen.pruefungsDatum}
mode="popup" locale="de" pattern="dd.MM.yyyy" required="true"
requiredMessage="Please provide a date."
converterMessage="Date is invalid.">
<f:convertDateTime type="date" pattern="dd.MM.yyyy"
timeZone="Europe/Berlin" locale="de" />
<f:validator validatorId="de.common.DateValidator" />
</p:calendar>
然后在给定日期做一些验证:
@FacesValidator(DateValidator.VALIDATOR_ID)
public class DateValidator implements Validator {
public static final String VALIDATOR_ID = "de.common.DateValidator";
@Override
public void validate(FacesContext facesContext, UIComponent component,
Object value) throws ValidatorException {
Date inputDate = (Date) value;
Calendar cal = Calendar.getInstance();
cal.setTime(inputDate);
if (cal.get(Calendar.YEAR) < 1000) {
throw new ValidatorException(new FacesMessage(FacesMessage.SEVERITY_ERROR, "Please provide a date with 4 digits for the year", null));
}
}
我知道这可以防止日期低于 1000,但就我而言,绝对清楚日期不能低于 2000。
所以建议是:使用Validator 确保日期正确。
我知道这不是完美的解决方案,但也许是一种可能的解决方法。
否则,请尝试在 primefaces 论坛上询问。