假设我有多个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>
答案 0 :(得分:4)
spec似乎没有在任何地方明确说明。
Application#publishEvent()
API提到它们是作为List
获得并处理的,这本质上是有序的。 Mojarra和MyFaces两种实现都通过将它们分别存储在CopyOnWriteArrayList
和ArrayList
中来确认这一点。
因此,逻辑上基于API和两个实现,如果添加到相同的父UI组件,它们确实按顺序执行。