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

时间:2015-03-31 14:07:57

标签: jsf jsf-2 primefaces

我尝试以这种方式使用带有弹出窗口的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
    }
}

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

任何人都可以帮助我吗?

2 个答案:

答案 0 :(得分:5)

valueChange事件仅由HTML DOM change事件触发。当通过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>

另见:

答案 1 :(得分:1)

尝试使用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>