rich:graphValidator

Component identification parameters

Name | Value
--- | ---
component-type | org.richfaces.graphValidator
component-class | org.richfaces.component.html.HtmlgraphValidator
component-family | org.richfaces.graphValidator
renderer-type | org.richfaces.graphValidatorRenderer
tag-class | org.richfaces.taglib.graphValidatorTag

## Creating the Component with a Page Tag

To create the simplest variant on a page use the following syntax:

Example:

    ...
    <h:outputText value="Name:" />
    <h:inputText value="#{userBean.name}" id="name" required="true">
              <f:validateLength minimum="3" maximum="12"/>
              <rich:graphValidator event="onblur"/>
    </h:inputText>
    ...

## Creating the Component Dynamically Using Java

Example:

    import org.richfaces.component.html.HtmlCalendar;
    ...
    HtmlgraphValidator mygraphValidator= new HtmlgraphValidator();
    ...

The <rich:graphValidator> component behaves basically the same way as the <rich:beanValidator> The deference between these two components is that in order to validate some input data with a <rich:beanValidator> component, it should be a nested element of an input component, whereas <rich:graphValidator> wraps multiple input components and validates the data received from them.

The following example demonstrates a pattern of how the <rich:graphValidator> can be used:

    ...
    <rich:graphValidator>
           <h:panelGrid columns="3">
                  <h:outputText value="Name:" />
                  <h:inputText value="#{validationBean.name}" id="name">
                         <f:validateLength minimum="2" />
                  </h:inputText>
                  <rich:message for="name" />
                  <h:outputText value="Email:" />
                  <h:inputText value="#{validationBean.email}" id="email" />
                  <rich:message for="email" />
           </h:panelGrid>
    </rich:graphValidator>
    ...

The data validation can be also performed using Hibernate Validator, the same way as it is done with <rich:beanValidator> .

The components's architecture provides an option to bind the component to a managed bean, which is done with the "value" attribute. The attribute ensures that the entered data is valid after the model is updated by revalidating the bean properties.

Please look at the example below.

    ...
    <rich:graphValidator summary="Invalid values: " value="#{dayStatistics}">
              <a4j:repeat value="#{dayStatistics.dayPasstimes}" var="pt" id="table">
                        <h:outputText value="#{pt.title}" />
                        <rich:inputNumberSpinner minValue="0" maxValue="24" value="#{pt.time}" id="time" />
                        <rich:message for="time" />
              </a4j:repeat>
    </rich:graphValidator>
    ...

Hence, the given above code will provide the functionality that is illustrated on the images below.

"Games" field did not pass validation

As you can see from the picture the "Games" field did not pass validation, as <rich:graphValidator> can be used to perform validation of a single input item.

Total sum of all input values is incorrect

The figure above shows that the entered data was revalidated after all fields were completed, and the data did not pass revalidation since the total sum was incorrect.

## Relevant Resources Links

On RichFaces LiveDemo page you can see an example of <rich:graphValidator> usage and sources for the given example.