org.omnifaces.component.messages
Class OmniMessages

java.lang.Object
  extended by javax.faces.component.UIComponent
      extended by javax.faces.component.UIComponentBase
          extended by javax.faces.component.UIMessages
              extended by javax.faces.component.html.HtmlMessages
                  extended by org.omnifaces.component.messages.OmniMessages
All Implemented Interfaces:
java.util.EventListener, javax.faces.component.PartialStateHolder, javax.faces.component.StateHolder, javax.faces.event.ComponentSystemEventListener, javax.faces.event.FacesListener, javax.faces.event.SystemEventListenerHolder

public class OmniMessages
extends javax.faces.component.html.HtmlMessages

The <o:messages> is a component that extends the standard <h:messages> with the following new features:

Multiple for components
Possibility to specify multiple client IDs space separated in the for attribute. The below example would only display messages for input1 and input3:

 <h:form>
   <o:messages for="input1 input3" />
   <h:inputText id="input1" />
   <h:inputText id="input2" />
   <h:inputText id="input3" />
   <h:inputText id="input4" />
 </h:form>
 
It can even refer non-input components which in turn contains input components. The below example would only display messages for input1 and input2:

 <h:form>
   <o:messages for="inputs" />
   <h:panelGroup id="inputs">
     <h:inputText id="input1" />
     <h:inputText id="input2" />
   </h:panelGroup>
   <h:inputText id="input3" />
   <h:inputText id="input4" />
 </h:form>
 
You can even combine them. The below example would only display messages for input1, input2 and input4.

 <h:form>
   <o:messages for="inputs input4" />
   <h:panelGroup id="inputs">
     <h:inputText id="input1" />
     <h:inputText id="input2" />
   </h:panelGroup>
   <h:inputText id="input3" />
   <h:inputText id="input4" />
 </h:form>
 
Displaying single message
Show a single custom message whenever the component has received any faces message. This is particularly useful when you want to display a global message in case any of the in for specified components has a faces message. For example:

 <o:messages for="form" message="There are validation errors. Please fix them." />
 <h:form id="form">
   <h:inputText id="input1" /><h:message for="input1" />
   <h:inputText id="input2" /><h:message for="input2" />
   <h:inputText id="input3" /><h:message for="input3" />
 </h:form>
 
HTML escaping
Control HTML escaping by the new escape attribute.

 <o:messages escape="false" />
 
Beware of potential XSS attack holes when user-controlled input is redisplayed through messages!
Iteration markup control
Control iteration markup fully by the new var attribute which sets the current FacesMessage in the request scope and disables the default table/list rendering. For example,

 <dl>
   <o:messages var="message">
     <dt>#{message.severity}</dt>
     <dd title="#{message.detail}">#{message.summary}</dd>
   </o:messages>
 </dl>
 
Note: the iteration is by design completely stateless. It's therefore not recommended to nest form components inside the <o:messages> component. It should be used for pure output only, like as the standard <h:messages>. Plain output links are however no problem. Also note that the message and escape attributes have in this case no effect. With a single message, there's no point of iteration. As to escaping, just use <h:outputText escape="false"> the usual way.

Design notice: the component class is named OmniMessages instead of Messages to avoid confusion with the Messages utility class.

Since:
1.5
Author:
Bauke Scholtz

Field Summary
static java.lang.String COMPONENT_TYPE
          The standard component type.
 
Fields inherited from class javax.faces.component.UIMessages
COMPONENT_FAMILY
 
Fields inherited from class javax.faces.component.UIComponent
BEANINFO_KEY, bindings, COMPOSITE_COMPONENT_TYPE_KEY, COMPOSITE_FACET_NAME, CURRENT_COMPONENT, CURRENT_COMPOSITE_COMPONENT, FACETS_KEY, VIEW_LOCATION_KEY
 
Constructor Summary
OmniMessages()
          Construct a new OmniMessages component whereby the renderer type is set to MessagesRenderer.RENDERER_TYPE.
 
Method Summary
 void encodeAll(javax.faces.context.FacesContext context)
          An override which delegates directly to UIComponentBase.encodeChildren(FacesContext).
 java.lang.String getMessage()
          Returns the single INFO message to be shown instead when this component has any faces message.
 java.lang.String getVar()
          Returns the name of the request attribute which exposes the current faces message.
 java.lang.Boolean isEscape()
          Returns whether the message detail and summary should be HTML-escaped.
 void setEscape(java.lang.Boolean escape)
          Sets whether the message detail and summary should be HTML-escaped.
 void setMessage(java.lang.String message)
          Sets the single INFO message to be shown instead when this component has any faces message.
 void setValueExpression(java.lang.String name, javax.el.ValueExpression binding)
          An override which checks if this isn't been invoked on var attribute.
 void setVar(java.lang.String var)
          Sets the name of the request attribute which exposes the current faces message.
 
Methods inherited from class javax.faces.component.html.HtmlMessages
getDir, getErrorClass, getErrorStyle, getFatalClass, getFatalStyle, getInfoClass, getInfoStyle, getLang, getLayout, getStyle, getStyleClass, getTitle, getWarnClass, getWarnStyle, isTooltip, setDir, setErrorClass, setErrorStyle, setFatalClass, setFatalStyle, setInfoClass, setInfoStyle, setLang, setLayout, setStyle, setStyleClass, setTitle, setTooltip, setWarnClass, setWarnStyle
 
Methods inherited from class javax.faces.component.UIMessages
getFamily, getFor, isGlobalOnly, isRedisplay, isShowDetail, isShowSummary, setFor, setGlobalOnly, setRedisplay, setShowDetail, setShowSummary
 
Methods inherited from class javax.faces.component.UIComponentBase
addClientBehavior, addFacesListener, broadcast, clearInitialState, decode, encodeBegin, encodeChildren, encodeEnd, findComponent, getAttributes, getChildCount, getChildren, getClientBehaviors, getClientId, getDefaultEventName, getEventNames, getFacesContext, getFacesListeners, getFacet, getFacetCount, getFacets, getFacetsAndChildren, getId, getParent, getRenderer, getRendererType, getRendersChildren, getValueBinding, invokeOnComponent, isRendered, isTransient, markInitialState, processDecodes, processRestoreState, processSaveState, processUpdates, processValidators, queueEvent, removeFacesListener, restoreAttachedState, restoreState, saveAttachedState, saveState, setId, setParent, setRendered, setRendererType, setTransient, setValueBinding
 
Methods inherited from class javax.faces.component.UIComponent
getClientId, getCompositeComponentParent, getContainerClientId, getCurrentComponent, getCurrentCompositeComponent, getListenersForEventClass, getNamingContainer, getResourceBundleMap, getStateHelper, getStateHelper, getValueExpression, initialStateMarked, isCompositeComponent, isInView, isVisitable, popComponentFromEL, processEvent, pushComponentToEL, setInView, subscribeToEvent, unsubscribeFromEvent, visitTree
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

COMPONENT_TYPE

public static final java.lang.String COMPONENT_TYPE
The standard component type.

See Also:
Constant Field Values
Constructor Detail

OmniMessages

public OmniMessages()
Construct a new OmniMessages component whereby the renderer type is set to MessagesRenderer.RENDERER_TYPE.

Method Detail

setValueExpression

public void setValueExpression(java.lang.String name,
                               javax.el.ValueExpression binding)
An override which checks if this isn't been invoked on var attribute. Finally it delegates to the super method.

Overrides:
setValueExpression in class javax.faces.component.UIComponent
Throws:
java.lang.IllegalArgumentException - When this value expression is been set on var attribute.

encodeAll

public void encodeAll(javax.faces.context.FacesContext context)
               throws java.io.IOException
An override which delegates directly to UIComponentBase.encodeChildren(FacesContext).

Overrides:
encodeAll in class javax.faces.component.UIComponent
Throws:
java.io.IOException

getVar

public java.lang.String getVar()
Returns the name of the request attribute which exposes the current faces message.

Returns:
The name of the request attribute which exposes the current faces message.

setVar

public void setVar(java.lang.String var)
Sets the name of the request attribute which exposes the current faces message.

Parameters:
var - The name of the request attribute which exposes the current faces message.

getMessage

public java.lang.String getMessage()
Returns the single INFO message to be shown instead when this component has any faces message.

Returns:
The single INFO message to be shown instead when this component has any faces message.
Since:
1.6

setMessage

public void setMessage(java.lang.String message)
Sets the single INFO message to be shown instead when this component has any faces message.

Parameters:
message - The single INFO message to be shown instead when this component has any faces message.
Since:
1.6

isEscape

public java.lang.Boolean isEscape()
Returns whether the message detail and summary should be HTML-escaped. Defaults to true.

Returns:
Whether the message detail and summary should be HTML-escaped.

setEscape

public void setEscape(java.lang.Boolean escape)
Sets whether the message detail and summary should be HTML-escaped.

Parameters:
escape - Whether the message detail and summary should be HTML-escaped.