JSF f:事件执行顺序

时间:2012-04-13 19:39:22

标签: jsf-2

假设我有多个f:事件标记来处理相同类型的事件:

<f:event type="preRenderView" listener="#{myBean.action1()} />
<f:event type="preRenderView" listener="#{myBean.action2()} />

执行顺序是否有保证?

修改
为了澄清为什么我需要按特定顺序执行它们,这是我的用例:

myBean#action1实际上是一个setter

myBean#action2是一个对action1

设置的字段进行操作的方法

在我看来,订单是不可靠的,这就是为什么我只是将它们作为EL expressions放在我的facelet中,如下所示:

<p:ouputPanel>
  #{myBean.action1()}
  #{myBean.action2()}
</p:ouputPanel>

1 个答案:

答案 0 :(得分:4)

spec似乎没有在任何地方明确说明。

Application#publishEvent() API提到它们是作为List获得并处理的,这本质上是有序的。 MojarraMyFaces两种实现都通过将它们分别存储在CopyOnWriteArrayListArrayList中来确认这一点。

因此,逻辑上基于API和两个实现,如果添加到相同的父UI组件,它们确实按顺序执行。