Primefaces 5.1 日历弹出窗口不执行 valueChange 事件

Primefaces 5.1 calendar popup doesn't execute the valueChange event

我尝试以这种方式使用带弹出窗口的 primefaces 日历:

<p:calendar pattern="yyyy-MMM-dd" value="#{controller.beginDate}" mask="true" navigator="true">
    <f:ajax event="valueChange" listener="#{controller.onChange}" />
</p:calendar>

这里是相对控制器:

@ManagedBean
public class Controller {
    private Date beginDate;

    public Date getBeginDate() {
        return beginDate;
    }

    public void setBeginDate(Date beginDate) {
        this.beginDate = beginDate;
    }

    public void onChange() {
        // do somethings
    }
}

问题:如果我从输入字段更改值,事件将执行,但如果我从弹出窗口更改它,事件将不会执行。

谁能帮帮我?

valueChange事件仅由HTMLDOMchange事件触发。当输入值被 JavaScript 手段操作时,这确实不会触发。

您需要 dateSelect 事件。而且,在 PrimeFaces 组件中,您最好使用 <p:ajax> 而不是 <f:ajax>

<p:calendar ...>
    <p:ajax event="valueChange" listener="#{controller.onChange()}" />
    <p:ajax event="dateSelect" listener="#{controller.onChange()}" />
</p:calendar>

另请参阅:

尝试使用 PrimeFaces dateSelect 事件。

来自 PrimeFaces 文档:

Calendar 提供了一个 dateSelect ajax 行为事件,以便在选择日期时立即执行 ajax 选择。如果您将方法定义为侦听器,它将通过传递 org.primefaces.event.SelectEvent 实例来调用。

<p:calendar value="#{calendarBean.date}">
    <p:ajax event="dateSelect" listener="#{bean.handleDateSelect}" />
</p:calendar>