使用后端日期更新PrimeFaces日历组件

时间:2013-08-02 08:51:03

标签: jsf primefaces

我使用PrimeFaces的日历组件。

    <p:calendar id="hotelCalendar"
                mode="inline"
                beforeShowDay="disableDates" 
                pages="1">
        <p:ajax event="dateSelect" listener="#{apartments.handleDateSelect}" 
              oncomplete="loadDisabledDates();" update="hotelCalendar"/>
    </p:calendar>

逻辑:当用户点击日期时,后端应处理此日期并将其设置为已禁用。 在该日历从后端接收更新的禁用日期数组(使用ajax请求)后,重新加载所有日期(使用beforeShowDay)并使用不同的颜色标记它们。可用 - 绿色,禁用 - 红色。

问题:在update事件后几乎立即执行日历dateSelect。这就是我在下次点击之前看不到当前变化的原因。

问题:

  1. 如何在js loadDisabledDates()完成后强制执行更新?
  2. 有没有其他方法可以实现这样的功能?可能是将Calendar组件绑定到bean?

1 个答案:

答案 0 :(得分:3)

oncomplete确实在update之后运行。我不确定你为什么要反过来,the documentation清楚地说明了这一点。

基本上,这是事件调用顺序:

  • onclick处理程序被调用
  • 使用基于process
  • 的表单数据准备ajax请求
  • onbegin处理程序被调用
  • 发送ajax请求
  • 成功检索到ajax响应(HTTP状态代码为200)
  • onsuccess处理程序被调用
  • 基于update
  • 在HTML DOM中执行ajax更新
  • oncomplete处理程序被调用

因此,如果您想在执行ajax响应之后但在更新HTML DOM之前执行某些脚本,请使用onsuccess而不是oncomplete