【问题标题】:Primefaces 5.1 calendar popup doesn't execute the valueChange eventPrimefaces 5.1 日历弹出不执行 valueChange 事件
【发布时间】:2015-03-31 14:07:56
【问题描述】:

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

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

谁能帮帮我?

【问题讨论】:

    标签: jsf jsf-2 primefaces


    【解决方案1】:

    valueChange 事件仅由 HTML DOM change 事件触发。当输入值通过 JavaScript 方式操作时,确实不会触发。

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

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

    另见:

    【讨论】:

    • 这样做的缺点是,如果您使用日历组件并选择同时使用“日历”部分和输入字段,则 两个 事件将在 PrimeFaces 中发送。将对此进行调查,如果我能“修复”这个问题,可能会向 PF 提交补丁
    • 此解决方案仅在我不使用 的情况下有效事件。它仅适用于“dateSelect”事件。我将把它作为一个单独的问题发布在 SO 上:stackoverflow.com/questions/43150568/…
    【解决方案2】:

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

    【讨论】:

    • dateSelect 不会因为你使用输入框而被触发。但是如果你同时添加它们,它们都是发送的,所以你会在服务器上得到两个事件。如果可能的话,应该在 PF 中进行优化
    猜你喜欢
    • 2023-03-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-25
    • 2012-11-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多