0

我正在尝试在网站上弹出日历以允许用户选择日期。这是用于提醒/任务实现。我不希望用户能够选择以前的日期或时间。

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

我可以让日历只在“现在”之后的几天和时间内有效吗?

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

4

1 回答 1

0

我猜默认情况下不可能在同一个日历组件中完成所有这些操作。因为它要求您在用户选择日期之后minHour更改值。minMinute这意味着日历组件需要再次渲染。

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

minHour然后,当用户选择日期并根据所选日期重新呈现时间组件并根据所选日期设置and时,您可以进行 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 回答