私が抱えている問題は、PrimesFaces 3.4.1 カレンダーにあります。ボタンまたは入力フィールドのフォーカスでアクティブ化されたポップアップ日付ピッカーを使用する場合、正常に機能する有効な日付のみを選択できます。
入力フィールドに手動で日付を追加すると問題が発生します。無効な日付を追加すると、PrimeFaces カレンダー コンポーネントはこれを有効な日付に変換して送信する際に最善の推測を行います。つまり、バックエンドの検証は失敗します。 . 以下にいくつかの興味深い翻訳を示します。
- 2012 年 2 月 30 日は 2014 年 2 月 6 日になります
- 322/05/2012 は 5/10/2038 になります
- 2012 年 1 月 14 日は 2012 年 4 月 1 日になります
この狂気を再現するには、PrimeFaces Calendar Showcaseをご覧ください。
属性の使用に関する解決策を見てきreadOnlyInput='true'
ましたが、数字やスラッシュではなく文字がフィールドに入力されるのを防ぐだけのようです。以下は、私が実装したカレンダーの 1 つのインスタンスです。
<p:calendar id="fldDateOfBirth"
value="#{pc_CreateUser.user.dateOfBirth}"
binding="#{pc_CreateUser.dobComp}"
navigator="true"
pattern="dd/MM/yyyy"
maxlength="10"
yearRange="-100"
validator="#{pc_CreateUser.validateDOB}"
title="#{msg.user_date_format_default_tip}"
converterMessage="#{msg.user_error_dob_invalid}"
readOnlyInput="true"
showOn="button" />
解決策として、私はどんな提案も受け入れます:
- これは PrimeFaces の一般的な問題ですか? それを修正するために使用できるトリックはありますか?
- JavaScript を使用して、送信前に日付を検証したり、すべてのユーザー入力を完全にブロックしたりできますか?
- 私が考えていない他の何か!
事前に感謝します。これにより、何週間も問題が発生しています。