如何在primefaces日历中提交手动输入日期?

时间:2016-09-07 11:12:52

标签: ajax primefaces calendar

我有一个带有两个主要日历输入元素和一个数据表的表单。日历项用于过滤表中显示的结果,从值到值。因此,我使用p:ajax'dateSelect'事件,当使用鼠标在弹出窗口上进行操作时,该事件正常工作。但是当我使用键盘在输入字段中手动更改日期时,不会触发任何更改事件。当我使用第二个p:ajax事件进行模糊或更改时,我无法获得新值。

    <p:calendar id="startDate"
                value="#{filterStart}" 
                required="true"
                showOn="button" 
                maxdate="#{filterEnd}"
                >
        <p:ajax event="dateSelect"
                listener="#{listController.onFilterStartChanged}"
                update="filterTbl, endDate" />
        <p:ajax event="change" 
                listener="#{listController.onFilterStartBlured}"
                update="filterTbl, endDate"
                process="@this"
                partialSubmit="true" immediate="true"  />                                                                       
</p:calendar>

当对pupup进行选择时,会调用onFilterStartChanged方法,可以读取新值:

public void onFilterStartChanged(final SelectEvent event)  {...}

但将焦点移动到另一个组件时不会触发键盘更改

public void onFilterStartBlured(final AjaxBehaviorEvent event)  {
    Date newDate = (Date)((Calendar)event.getSource()).getValue();
    ...
}

我怎样才能获得新约会?

1 个答案:

答案 0 :(得分:0)

我对Primefaces 5.3中的p:calendar有同样的需求,这对我来说很有用。我不使用事件参数

<p:calendar id="startDate"
            value="#{filterStart}" 
            required="true"
            showOn="button" 
            maxdate="#{filterEnd}"
            >
    <p:ajax event="dateSelect"
            listener="#{listController.onFilterStartChanged()}"
            update="filterTbl, endDate" />
    <p:ajax event="change" 
            listener="#{listController.onFilterStartChanged()}"
            update="filterTbl, endDate/></p:calendar>

方法中没有参数,值在filterStart

public void onFilterStartChanged()  {...}