2012-04-13 88 views
4

假设我有多个F:事件代码来处理同类事件的:JSF F:事件的执行顺序

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

保证执行的顺序?

编辑:
解释,为什么我需要他们在特定的顺序执行,这是我的使用情况:

为myBean#动作1实际上是一个二传手

为myBean#1动作是一个方法即由动作1

在我看来设置字段操作,顺序是不可靠的,这就是为什么我只是把他们当成EL expressions我的facelet里是这样的:

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

不知道,但是如果你只放置一个只有你从action1中调用动作2的f:event,你总能保证100%。:) – Daniel 2012-04-13 19:54:42

+0

不能这样做。我需要将不同的参数传递给这些'action'方法。并且这些方法在逻辑上不相关。我知道还有其他的选择,但我只是好奇我是否可以依靠订单。 – jFrenetic 2012-04-13 20:01:15

回答

4

spec似乎没有明确指出,在任何地方。

Application#publishEvent() API提到它们被获取和处理为List这本质上是有序的。 MojarraMyFaces实现都通过将它们分别存储在CopyOnWriteArrayListArrayList中来进行确认。

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

+0

谢谢!您的意见像往常一样受到高度赞赏;) – jFrenetic 2012-04-13 20:41:56

+0

不客气。 – BalusC 2012-04-13 20:47:51