A tabular form is validating a input field using a validator method binding plus a standard f:validateLength validator.
<rich:dataTable value="#{menuAdminController.selectedObject.attributes}" var="attribute" id="attributesTable">
 <rich:column>
 <f:facet name="header">
 <h:outputText value="Login" />
 </f:facet>
 <h:inputText id="login" value="#{attribute.login}" required="false"
 valueChangeListener="#{attribute.userValueChanged}" validator="#{attribute.validateUser}">
 <f:validateLength maximum="5" />
 <!-- TODO: validatorMessage does not get displayed here -->
 </h:inputText>
 <rich:message for="login" />
 </rich:column>
</rich:dataTable>
<a4j:commandButton value="#{applicationResources['command.store']}" action="#{menuAdminController.storeAttributes}"
 oncomplete="if (!hasFacesMessages) Richfaces.hideModalPanel('editPanel');" />public void validateUser(FacesContext context, UIComponent component, Object value) throws ValidatorException {
 if (value == null || ((String) value).length() == 0) {
 return;
 }
 try {
 throw new ValidatorException(new FacesMessageSupport().newFacesMessage(FacesMessage.SEVERITY_ERROR,
 message));
 } catch (DataAccessException e) {
 throw new ValidatorException(new FacesMessageSupport().newFacesMessage(e));
 }
}FacesContext.getCurrentInstance().getClientIdsWithMessages()