JSF动作侦听器 - 双重行为

时间:2011-12-05 21:10:00

标签: jsf myfaces

我正在使用JSF的Apache MyFaces风格,我在使用动作侦听器遇到了一些奇怪的行为。

当我像这样使用全局action-listener

 <application>
  <view-handler>com.sun.facelets.FaceletViewHandler</view-handler>
  <el-resolver id="msgSrcResolver">com.personal.framework.utils.FacesELResolver</el-resolver>
  <message-bundle>resources.errors</message-bundle>
  <action-listener>com.personal.framework.listeners.MyActionListener</action-listener>
 </application>

JSF运作良好。 'MyActionListener.processAction(..)'方法通过调用action上列出的CommandButton方法来工作。不幸的是,由于在同一个项目中基于Spring WebFlow的应用程序中出现了一些冲突,我们无法使用它。

要解决此问题,我尝试将动作侦听器直接添加到CommandButton,如下所示:

<h:commandButton id="continue" forceId="true"
image="continue.gif"
action="#{depositBean.postProcess}"
value="Continue"> 
<f:actionListener type="com.personal.framework.listeners.MyActionListener" > </f:actionListener>
</h:commandButton>

这种使用ActionListener的方法无法正常工作 - 它会根据需要调用depositBean.postProcessMyActionListener,但之后会再次调用depositBean.postProcess MyActionListeren。

如何在ActionListener中使用CommandButton,而不是第二次调用Action本身(与使用全局ActionListener的方式相同)?

注意 - 我们使用ActionListener进行验证错误处理,因此必须通过Action调用所有ActionListener方法。

0 个答案:

没有答案