0

ユーザーが日付を選択できるように、Web サイトでカレンダーのポップアップを作成しようとしています。これはリマインダー/タスクの実装用です。ユーザーが以前の日付または時刻を選択できるようにしたくありません。

この質問へのアドバイスはmindate="today (get new Date())". 前日を選択できなくなるので、これは素晴らしいことです。ただし、ユーザーは現在よりも前の今日の時刻を選択することもできます。したがって、自然に と を選択minHourminMinuteますが、それらは将来のためにも保持されます。したがって、これらの 3 つすべてを設定すると、近づくことができますが、問題は、明日の日付を選択すると、システム時間の に基づくminMinuteとに基づいた時刻のみが許可されることです。明日はいつでも好きな時間を選択できるはずです。minHour"today (get new Date())"

カレンダーを「今」以降の日時のみ有効にすることはできますか??

これは自然な設定のようです。 futureDates="disabled"pastDates="disabled"など

4

1 に答える 1

0

デフォルトでは、これらすべてを同じカレンダー コンポーネントで行うことはできないと思います。ユーザーが日付を選択した後に値minHourを変更する必要があるためです。minMinuteつまり、カレンダー コンポーネントを再度レンダリングする必要があります。

これを 2 つのコンポーネントに分けることができます。1 つは日付のみを選択するためのもので、もう 1 つは時間を選択するためのものです。

次に、ユーザーが日付を選択し、選択した日付に基づいて時間コンポーネントを再レンダリングし、選択した日付に従って と を設定するminHourと、ajax 呼び出しを実行できminMinuteます。

xhtml は次のようになります。

<p:calendar id="dateOnly" mindate="#{datePickerView.minDate}"
    value="#{datePickerView.chosenDate}">

    <p:ajax event="dateSelect" listener="#{datePickerView.handleDateSelect}" update="timeOnly" />  
</p:calendar>

<br />

<p:calendar id="timeOnly" value="#{datePickerView.chosenTime}" 
    pattern="HH:mm" timeOnly="true" minHour="#{datePickerView.minHour}" 
    minMinute="#{datePickerView.minMinute}" />

Bean は次のようになります。

public class DatePickerView implements Serializable {
    private static final long serialVersionUID = 1L;

    private Date chosenDate;
    private Date chosenTime;

    public void handleDateSelect(DateSelectEvent event) {
        chosenDate = event.getDate();
    }

    public Date getMinDate() {
        return Calendar.getInstance().getTime();
    }

    public int getMinHour() {
        if (chosenDate.after(Calendar.getInstance().getTime())) {
            return 0;
        } else {
            return Calendar.getInstance().get(Calendar.HOUR_OF_DAY);
        }
    }

    public int getMinMinute() {
        if (chosenDate.after(Calendar.getInstance().getTime())) {
            return 0;
        } else {
            return Calendar.getInstance().get(Calendar.MINUTE);
        }
    }

    public Date getChosenDate() {
        return chosenDate;
    }

    public void setChosenDate(Date chosenDate) {
        this.chosenDate = chosenDate;
    }

    public Date getChosenTime() {
        return chosenTime;
    }

    public void setChosenTime(Date chosenTime) {
        this.chosenTime = chosenTime;
   }
}

もちろん、タイムゾーンの処理などを追加する必要があります。

于 2012-09-12T09:07:38.210 に答える