プライムフェイスのカレンダーでも同様の問題がありました。
pattern="dd.MM.yyyy"
1つは、パターンが設定されていますが、2桁の日付を受け入れます。Likeは、日付が正しく認識されたとユーザーに誤解させるもの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年未満になることは絶対にありません.
したがって、提案は次のとおりです。 a を使用しValidator
て、日付が正しいことを確認してください。私はそれが完璧な解決策ではないことを知っていますが、おそらく可能な回避策です。
それ以外の場合は、primefaces フォーラムで質問してみてください。