【发布时间】:2015-05-08 04:55:56
【问题描述】:
这是我的标记:
<h:commandLink value="#{partial}" action="#{hello.setCurrentPartial(partial)}">
<f:ajax render="include" listener="#{hello.renderFragments}"/>
</h:commandLink>
我尝试在 Mojarra-2.2.8(wildfly 8.2.0.Final 内置)和 MyFaces-2.2.7(按照指导安装 here)中运行此页面。令人惊讶的是,当点击链接时,mojarra 先调用hello.renderFragments,然后调用hello.setCurrentPartial,但MyFaces 采用相反的顺序,即先调用hello.setCurrentPartial。
所以我的问题是JSF Spec中是否定义了action和ajax listener的调用顺序。如果定义了顺序,哪个实现是正确的?
【问题讨论】:
-
这确实出乎意料。作为解决方法,将
<f:ajax listener>移动到<h:commandLink actionListener>。我会向 JSF 规范人员询问这个差异。 -
@BalusC 我猜 mojarra 行为是理想的行为(请纠正我,因为我不太确定),不应该在操作方法之前调用侦听器吗?
-
@Tarik:我在规范中找不到有关此行为的参考,但 Mojarra 行为确实更直观/自然/预期。首先是侦听器,然后是动作,就像 actionListener/action 的工作方式一样。我把 EG 留给了mail。
-
@BalusC 好的,顺便说一句,你刚刚收到了第一个回复
-
@Tarik:是的,只是我的同事提到了一项协议。