我猜默认情况下不可能在同一个日历组件中完成所有这些操作。因为它要求您在用户选择日期之后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;
}
}
您当然应该添加时区处理等。