0

我使用 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. 有没有其他方法可以实现这样的功能?可能将日历组件绑定到bean?
4

1 回答 1

3

oncomplete确实在之后运行update。我不确定您为什么期望相反,文档清楚地说明了这一点。

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

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

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

于 2013-08-02T12:21:42.053 回答