4

假设我有多个 f:event 标签来处理同一种事件:

<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>
4

1 回答 1

4

规范似乎没有在任何地方明确说明这一点。

Application#publishEvent()API 提到它们是作为List自然有序的获取和处理的。Mojarra和MyFaces实现都通过将它们分别存储在 a和中证实这一点。CopyOnWriteArrayListArrayList

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

于 2012-04-13T20:07:52.100 回答