Я имел аналогичные проблемы с календарем primefaces.
Для одного он принимает даты с двумя цифрами, хотя установлен шаблон pattern="dd.MM.yyyy"
. Например, 20.06.12
будет отображаться в всплывающем окне календаря как 20.06.2012
, вводящий в заблуждение пользователя, чтобы считать, что дата была правильно распознана. Но 12-й год действительно установлен.
В любом случае, я в конечном итоге установив <f:validator>
внутри <p:calendar>
как это:
<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, такими как преобразование недействительных дат, таких как '30/02/2012 ', в' 2/6/2014 ', потому что к тому времени, когда он дойдет до конца, он уже был преобразован в действительный Дата? – JonnyIrving
Дополнительная информация о вышеуказанной точке: http://stackoverflow.com/questions/13763717/primefaces-calendar-accepts-invalid-dates-as-input – JonnyIrving
Его проблема в том, что 2 цифры «дня»/«месяца» перекатываются и сопоставляет его с соответствующим месяцем в будущем/прошлом - это связано с тем, что SimpleDateformat имеет снисходительность true, при этом конвертер должен решить эту проблему. :) – VeenarM