public class Highlight extends OnloadScript
Highlight is a helper component which highlights all invalid UIInput
components 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,
.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" />
Modifier and Type | Field and Description |
---|---|
static String |
COMPONENT_TYPE
The standard component type.
|
COMPONENT_FAMILY
BEANINFO_KEY, bindings, COMPOSITE_COMPONENT_TYPE_KEY, COMPOSITE_FACET_NAME, CURRENT_COMPONENT, CURRENT_COMPOSITE_COMPONENT, FACETS_KEY, VIEW_LOCATION_KEY
Constructor and Description |
---|
Highlight()
Constructs the Highlight component.
|
Modifier and Type | Method and Description |
---|---|
void |
encodeChildren(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. |
String |
getStyleClass()
Returns the error style class which is to be applied on invalid inputs.
|
boolean |
isFocus()
Returns whether the first error element should gain focus.
|
void |
setFocus(boolean focus)
Sets whether the first error element should gain focus.
|
void |
setStyleClass(String styleClass)
Sets the error style class which is to be applied on invalid inputs.
|
processEvent
getFamily, getRendersChildren
addClientBehavior, addFacesListener, broadcast, clearInitialState, decode, encodeBegin, encodeEnd, 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
encodeAll, getClientId, getCompositeComponentParent, getContainerClientId, getCurrentComponent, getCurrentCompositeComponent, getListenersForEventClass, getNamingContainer, getResourceBundleMap, getStateHelper, getStateHelper, getValueExpression, initialStateMarked, isCompositeComponent, isInView, isVisitable, popComponentFromEL, pushComponentToEL, setInView, setValueExpression, subscribeToEvent, unsubscribeFromEvent, visitTree
public static final String COMPONENT_TYPE
public void encodeChildren(FacesContext context) throws IOException
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
inconsitenties because it's supposed to be an one-time change.
encodeChildren
in class OnloadScript
IOException
public String getStyleClass()
public void setStyleClass(String styleClass)
styleClass
- The error style class which is to be applied on invalid inputs.public boolean isFocus()
true
.public void setFocus(boolean focus)
focus
- Whether the first error element should gain focus.