【问题标题】:dateSelect event not being executed in p:calendardateSelect 事件未在 p:calendar 中执行
【发布时间】:2016-07-20 09:37:25
【问题描述】:

我一直在尝试解决此问题,但无法解决。问题是我有一个带有 dateSelect 事件的日历,只要用户在弹出日历中选择一个日期,就可以触发该事件,但永远不会执行侦听器。从我的角度来看,语法是正确的。

form.xhtml 日历代码。

                        <p:calendar value="#{travel.departureDate}" required="true"
                            id="departureDate" pattern="MM/dd/yyyy HH:mm:ss"
                            onfocus="$('#ui-datepicker-div td').unbind();" readonly="true">
                            <p:ajax event="dateSelect" actionListener="#{travelControl.alterDate}"
                            update=":main-form:departureDate" />
                        </p:calendar>

一切都在一个表单和一个 panelGrid 容器中。

bean方法如下。

public void alterDate(SelectEvent event) {
    System.out.println("Hour [Pre] "
            + travel.getDepartureDate().toString()); //debug

    travel.setDepartureDate((Date) event.getObject());

    System.out.println("Hour [Post] "
            + travel.getDepartureDate().toString()); //debug
}

选择日期后,文本字段的值会暂时更改,然后重置为 bean 中的值,因为由于事件未正确触发而未更改。

【问题讨论】:

    标签: ajax jsf primefaces


    【解决方案1】:

    使用监听器代替 actionListener:

    listener ="#{travelControl.alterDate}"
    

    【讨论】:

    • 您是否尝试过删除您的 alterDate 方法中的代码,然后只是吐出一条日志消息以查看它是否被调用。我复制了您的代码并将“actionListener”更改为“listener”使其工作。在你的方法中,你从哪里得到“旅行”?
    • 我从这里得到旅行。 @ManagedProperty(value = "#{travel}") private BeanTravel travel; 。我有那些 .out.println 来检查它是否已执行,但在选择日期时我什么也没得到。
    • 移除 onfocus 和 readonly 位,看看是否有帮助;我的代码不适用于添加的任何一个:onfocus="$('#ui-datepicker-div td').unbind();" readonly="true"
    • 哦原来是这个问题,非常感谢!但由于它是必要的部分,因此用户可以从日历中选择日期,我该如何解决呢? 'onclose' 的另一个 ajax 事件?
    • 对不起,我没有遵循。你需要控件做什么?
    猜你喜欢
    • 2012-05-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-17
    • 2017-07-15
    相关资源
    最近更新 更多