primefaces日历可以禁用过去的日期和时间吗

Can primefaces calendar make past dates and times disabled?

本文关键字:日期 时间 过去 日历 primefaces      更新时间:2023-09-26

我正试图在网站上弹出日历,让用户选择日期。这是为了提醒/执行任务。我不希望用户能够选择以前的日期或时间。

所有人对这个问题的建议都是mindate="today (get new Date())"。这很好,因为这会使前几天无法选择。然而,人们仍然可以选择今天一天中的某个时间,即现在之前的时间。因此,人们自然会选择minHourminMinute,但它们也会保留到未来几天。所以,如果我把这三个都设置好了,我们就很接近了,但问题是,如果我选择明天的日期,它只允许基于minMinuteminHour的一天中的时间,这两个时间基于您的系统时间"today (get new Date())"。你明天应该可以选择任何你想要的时间。

我可以让日历只在"现在"之后的日期和时间有效吗??

这似乎是一个自然的环境。futureDates="disabled"pastDates="disabled"

我想默认情况下,在同一个日历组件中完成所有这些是不可能的。因为它要求在用户选择日期后更改minHourminMinute的值。这意味着日历组件需要再次渲染。

您可以将其分为两个部分:一个用于只选择日期,另一个用于选择时间。

然后,当用户选择日期时,您可以执行ajax调用,并根据所选日期重新发送时间组件,并根据选择的日期设置minHourminMinute

这就是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}" />

这就是豆子的样子:

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;
   }
}

您当然应该添加时区处理等等。