- 

Available since OmniFaces 1.1

The InvokeActionEventListener will add support for new <f:event> types preInvokeAction and postInvokeAction. Those events are published during the beforephase and afterphase of INVOKE_APPLICATION respectively.

This event is supported on any UIComponent, including UIViewRoot, UIForm, UIInput and UICommand components. This thus also provides the possibility to invoke multiple action listeners on a single UIInput and UICommand component on an easy manner.

As this phase listener has totally no impact on a webapp's default behavior, this phase listener is already registered by OmniFaces own faces-config.xml and thus gets auto-initialized when the OmniFaces JAR is bundled in a webapp, so endusers do not need to register this phase listener explicitly themselves.

Demo

Replacement for preRenderView event

Clicking this link with a "test" request parameter should force a redirect with a faces message in the flash scope which should appear below. This wouldn't have worked when preRenderView event is been used.

Message:


Invoking multiple action listeners in UIInput and UICommand components

Typing in the input field and clicking the submit button of the below demo form should invoke several action listeners which should each set a global faces message.

Demo source code
<f:metadata>
    <f:viewParam name="param" value="#{invokeActionBean.param}" />
    <f:event type="postInvokeAction" listener="#{invokeActionBean.initParam}" />
</f:metadata>

<h3>Replacement for <code>preRenderView</code> event</h3>

<p>
    Clicking <h:link value="this link" outcome="#{view.viewId}?param=test" /> with a "test" request parameter 
    should force a redirect with a faces message in the flash scope which should appear below. This wouldn't
    have worked when <code>preRenderView</code> event is been used.
</p>
<p>
    Message: <h:message for="param" />
</p>

<hr />

<h3>Invoking multiple action listeners in <code>UIInput</code> and <code>UICommand</code> components</h3>
<p>
    Typing in the input field and clicking the submit button of the below demo form should invoke several 
    action listeners which should each set a global faces message.
</p>
<h:form>
    <h:inputText value="#{invokeActionBean.input}">
        <f:ajax event="keyup" execute="@this" listener="#{invokeActionBean.inputListener()}" render=":messages" />
        <f:event type="preInvokeAction" listener="#{invokeActionBean.preInvokeAction}" />
        <f:event type="postInvokeAction" listener="#{invokeActionBean.postInvokeAction}" />
    </h:inputText>
    <h:commandButton value="submit" action="#{invokeActionBean.submit}">
        <f:ajax execute="@form" render=":messages" />
        <f:event type="preInvokeAction" listener="#{invokeActionBean.preInvokeAction}" />
        <f:event type="postInvokeAction" listener="#{invokeActionBean.postInvokeAction}" />
    </h:commandButton>
</h:form>
<h:messages id="messages" globalOnly="true" />