4

Primefaces カレンダーを使用していますが、無効な日付を入力できます。たとえば、日付フィールドの入力ボックスに日付を 32-06-2012 と入力して、レコードを保存します。日付を 02-07-2012 として保存しています。プライムフェイスのショーケースでも同じ動作が見られます。

参考:http ://www.primefaces.org/showcase/ui/calendarBasic.jsf

これが私のコードです

<p:calendar id="copyStartDateCalendar" pattern="dd/MM/yyyy"

         mode="popup" showOn="button" size='8' >

                <f:convertDateTime pattern="MM/yyyy" />

</p:calendar>

コンポーネント自体に何らかのエラーがあるようです。

ありがとうございます。それでは、お元気で

タルン・マダーン

4

3 に答える 3

2

プライムフェイスのカレンダーでも同様の問題がありました。

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 フォーラムで質問してみてください。

于 2012-06-20T09:47:21.123 に答える
2

readonly="true"サーバー側のバリデーターを使用する必要がないような場合に使用してみてください。このオプションでは、エンド ユーザーのみがカレンダー パネルから日付を選択できるようになります。

于 2012-12-22T14:45:47.340 に答える