org.omnifaces.component.script
Class Highlight

java.lang.Object
  extended by javax.faces.component.UIComponent
      extended by javax.faces.component.UIComponentBase
          extended by org.omnifaces.component.script.ScriptFamily
              extended by org.omnifaces.component.script.OnloadScript
                  extended by org.omnifaces.component.script.Highlight
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.SystemEventListener, javax.faces.event.SystemEventListenerHolder

public class Highlight
extends OnloadScript

Highlight is a helper component which highlights all invalid UIInput components and the associated labels by adding an error style class to them. Additionally, it by default focuses the first invalid UIInput component. The <o:highlight /> component can be placed anywhere in the view, as long as there's only one of it. Preferably put it somewhere in the master template for forms.

 <h:form>
   <h:inputText value="#{bean.input1}" required="true" />
   <h:inputText value="#{bean.input2}" required="true" />
   <h:commandButton value="Submit" action="#{bean.submit}" />
 </h:form>
 <o:highlight />
 

The default error style class name is error. You need to specify a CSS style associated with the class yourself. For example,

 label.error {
   color: #f00;
 }
 input.error, select.error, textarea.error {
   background-color: #fee;
 }
 

You can override the default error style class by the styleClass attribute:

 <o:highlight styleClass="invalid" />
 

You can disable the default focus on the first invalid input element setting the focus attribute.

 <o:highlight styleClass="invalid" focus="false" />
 

Author:
Bauke Scholtz

Field Summary
static java.lang.String COMPONENT_TYPE
          The standard component type.
 
Fields inherited from class org.omnifaces.component.script.ScriptFamily
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
Highlight()
          Constructs the Highlight component.
 
Method Summary
 void encodeChildren(javax.faces.context.FacesContext context)
          Visit all components of the current UIForm, check if they are an instance of UIInput and are not UIInput.isValid() and finally append them to an array in JSON format and render the script.
 java.lang.String getStyleClass()
          Returns the error style class which is to be applied on invalid inputs.
 java.lang.Boolean isFocus()
          Returns whether the first error element should gain focus.
 void setFocus(java.lang.Boolean focus)
          Sets whether the first error element should gain focus.
 void setStyleClass(java.lang.String styleClass)
          Sets the error style class which is to be applied on invalid inputs.
 
Methods inherited from class org.omnifaces.component.script.OnloadScript
encodeBegin, encodeEnd, isListenerForSource, processEvent, processEvent
 
Methods inherited from class org.omnifaces.component.script.ScriptFamily
getFamily, getRendersChildren
 
Methods inherited from class javax.faces.component.UIComponentBase
addClientBehavior, addFacesListener, broadcast, clearInitialState, decode, findComponent, getAttributes, getChildCount, getChildren, getClientBehaviors, getClientId, getDefaultEventName, getEventNames, getFacesContext, getFacesListeners, getFacet, getFacetCount, getFacets, getFacetsAndChildren, getId, getParent, getRenderer, getRendererType, 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
encodeAll, getClientId, getCompositeComponentParent, getContainerClientId, getCurrentComponent, getCurrentCompositeComponent, getListenersForEventClass, getNamingContainer, getResourceBundleMap, getStateHelper, getStateHelper, getValueExpression, initialStateMarked, isCompositeComponent, isInView, isVisitable, popComponentFromEL, pushComponentToEL, setInView, setValueExpression, 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

Highlight

public Highlight()
Constructs the Highlight component.

Method Detail

encodeChildren

public void encodeChildren(javax.faces.context.FacesContext context)
                    throws java.io.IOException
Visit all components of the current UIForm, check if they are an instance of UIInput and are not UIInput.isValid() and finally append them to an array in JSON format and render the script.

Note that the FacesContext.getClientIdsWithMessages() could also be consulted, but it does not indicate whether the components associated with those client IDs are actually UIInput components which are not UIInput.isValid(). Also note that the highlighting is been done by delegating the job to JavaScript instead of directly changing the component's own styleClass attribute; this is chosen so because we don't want the changed style class to be saved in the server side view state as it may result in potential inconsistencies because it's supposed to be an one-time change.

Overrides:
encodeChildren in class javax.faces.component.UIComponentBase
Throws:
java.io.IOException

getStyleClass

public java.lang.String getStyleClass()
Returns the error style class which is to be applied on invalid inputs. Defaults to error.

Returns:
The error style class which is to be applied on invalid inputs.

setStyleClass

public void setStyleClass(java.lang.String styleClass)
Sets the error style class which is to be applied on invalid inputs.

Parameters:
styleClass - The error style class which is to be applied on invalid inputs.

isFocus

public java.lang.Boolean isFocus()
Returns whether the first error element should gain focus. Defaults to true.

Returns:
Whether the first error element should gain focus.

setFocus

public void setFocus(java.lang.Boolean focus)
Sets whether the first error element should gain focus.

Parameters:
focus - Whether the first error element should gain focus.