我是JSF的新手,所以我不知道自己面对的行为是否正常。

我有以下代码:

<p:selectBooleanCheckbox id="locationChoice1" value="#{login.locationChoice1}">
    <p:ajax listener="#{login.chooseLocationType1}" update="locationChoice1 locationChoice2 positionChoice" />
    <p:ajax listener="#{login.retrieveGalaxies}" update="test"  />
</p:selectBooleanCheckbox>

我的login.retrieveGalaxies函数调用了sleep(8000)函数以模拟延迟。我希望我的组件locationChoice1locationChoice2positionChoice在1或2秒内更新,而test组件在8秒内更新,但所有这些都在8秒内更新。

这是正确的行为吗?

我尝试使用async参数,但没有改变结果。

最佳答案

它们实际上是异步的(未阻止JS上下文;即,您可以同时运行其他任意JS代码而不会被阻止)。您看到的行为是因为它们已排队。因此,看起来好像它们不是异步的。
此队列的行为在JSF 2 specification的第13.3.2章中指定:

这样做是为了确保JSF View 状态的完整性和线程安全性(并因此也固有地查看 View 作用域的bean)。

09-10 13:34
查看更多