p:datePicker 空日期的 dateSelect 事件

p:datePicker dateSelect event on empty dates

我有两个 p:datePicker,它们工作正常:

<p:outputLabel for="filterStartDate" value="Start Date:" />
<p:datePicker id="filterStartDate" value="#{historyController.filterStartDate}" timeOnly="true" pattern="HH:mm" converter="#{localTimeConverter}">
    <p:ajax event="dateSelect" listener="#{historyController.filterStartDateSelect}"/>
</p:datePicker>

<p:outputLabel for="filterEndDate" value="End Date:" />
<p:datePicker id="filterEndDate" value="#{historyController.filterEndDate}" timeOnly="true" pattern="HH:mm" converter="#{localTimeConverter}">
    <p:ajax event="dateSelect" listener="#{historyController.filterEndDateSelect}"/>
</p:datePicker>

在我的 后端 上,我捕获 ajax 事件的方法是:

private LocalTime filterStartDate;
private LocalTime filterEndDate;

public void filterStartDateSelect(SelectEvent event) {
    filterStartDate = ((LocalTime) event.getObject());
}

public void filterEndDateSelect(SelectEvent event) {
    filterEndDate = ((LocalTime) event.getObject());
}

这工作正常,问题是当我想将对象 filterStartDatefilterEndDate 初始化为 null 时。 ajax 事件 dateSelect 当值为空时它永远不会被调用。

如果您查看 "Ajax Behavior Events" section of the p:datePicker documentation,您会发现唯一明确记录的事件是 dateSelect。但是有一个注意事项:

In popup mode, DatePicker also supports regular ajax behavior events like blur, keyup and more.

因此您可以添加一个 Ajax 侦听器并处理所有更改并使用它来处理 null 值。或者只使用 change 事件来处理所有更改,这样可以节省对服务器的额外 Ajax 调用。