Class ViewAction

All Implemented Interfaces:
ActionSource, PartialStateHolder, StateHolder, TransientStateHolder, ComponentSystemEventListener, FacesListener, SystemEventListenerHolder, EventListener

public class ViewAction extends UIViewAction

The <o:viewAction> is a component that extends the standard <f:viewAction> and changes the if attribute to be evaluated during INVOKE_APPLICATION phase instead of the APPLY_REQUEST_VALUES phase. This allows developers to let the if attribute check the converted and validated model values before performing the view action, which results in much more intuitive behavior.

In below example, the FooConverter may convert a non-null parameter to null without causing a validation or conversion error, and the intent is to redirect the current page to otherpage.xhtml when the converted result is null.

 <f:viewParam name="foo" value="#{bean.foo}" converter="fooConverter" />
 <f:viewAction action="otherpage" if="#{bean.foo eq null}" />
 

This is however not possible with standard <f:viewAction> as it evaluates the if attribute already before the conversion has taken place. This component solves that by postponing the evaluation of the if attribute to the INVOKE_APPLICATION phase.

 <f:viewParam name="foo" value="#{bean.foo}" converter="fooConverter" />
 <o:viewAction action="otherpage" if="#{bean.foo eq null}" />
 

Only when you set immediate="true", then it will behave the same as the standard <f:viewAction>.

Usage

You can use it the same way as <f:viewAction>, you only need to change f: to o:.

 <o:viewAction action="otherpage" if="#{bean.property eq null}" />
 

Messaging

You can use the message attribute to add a global flash warning message.

 <o:viewAction ... message="Please use a valid link from within the site" />
 

Note that the message will only be shown when the redirect has actually taken place. The support was added in OmniFaces 3.2.

Since:
2.2
Author:
Bauke Scholtz
  • Field Details

    • COMPONENT_TYPE

      public static final String COMPONENT_TYPE
      The component type, which is "org.omnifaces.component.input.ViewAction".
      See Also:
  • Constructor Details

    • ViewAction

      public ViewAction()
  • Method Details

    • broadcast

      public void broadcast(FacesEvent event)
      Only broadcast the action event when UIViewAction.isRendered() returns true. The default implementation will always broadcast. The UIViewAction.isRendered() is by default only considered during UIViewAction.decode(jakarta.faces.context.FacesContext).

      If the action event performs any redirect, then add any getMessage() as a global flash warning message.

      Overrides:
      broadcast in class UIViewAction
    • isRendered

      public boolean isRendered()
      Returns true if the immediate="true" attribute is not set, otherwise delegate to super, hereby maintaining the original behavior of immediate="true".
      Overrides:
      isRendered in class UIViewAction
    • getMessage

      public String getMessage()
      Returns the global flash warning message to be shown in the redirected page.
      Returns:
      The global flash warning message to be shown in the redirected page.
      Since:
      3.2
    • setMessage

      public void setMessage(String message)
      Sets the global flash warning message to be shown in the redirected page.
      Parameters:
      message - The global flash warning message to be shown in the redirected page.
      Since:
      3.2