Я использую версию Apache MyFaces JSF и испытываю странное поведение с прослушивателем действий.
Когда я использую глобальный 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.postProcess
до MyActionListener
, как я хочу, но затем depositBean.postProcess
вызывается снова, вне MyActionListeren.
Как я могу использовать ActionListener
в CommandButton
, не называя Action
во второй раз, сам по себе (так же, как при использовании глобального ActionListener
)?
Примечание - мы используем ActionListener
для обработки ошибок валидации, поэтому все методы Action
должны вызываться через ActionListener
.