code: public void processValidators(FacesContext context) {
  
          if (context == null) {
              throw new NullPointerException();
          }
  
          // Skip processing if our rendered flag is false
          if (!isRendered()) {
              return;
          }
  
          pushComponentToEL(context, this);
  
          if (!isImmediate()) {
              Application application = context.getApplication();
              application.publishEvent(context, PreValidateEvent.class, this);
              executeValidate(context);
              application.publishEvent(context, PostValidateEvent.class, this);
          }
          for (Iterator<UIComponent> i = getFacetsAndChildren(); i.hasNext(); ) {
              i.next().processValidators(context);
          }
  
          popComponentFromEL(context);
      }
docs: <p>In addition to the standard <code>processValidators</code> behavior
  inherited from {@link UIComponentBase}, calls <code>validate()</code>
  if the <code>immediate</code> property is false (which is the
  default);  if the component is invalid afterwards, calls
  {@link FacesContext#renderResponse}.
  If a <code>RuntimeException</code> is thrown during
  validation processing, calls {@link FacesContext#renderResponse}
  and re-throw the exception.
  </p>
  
  @throws NullPointerException {@inheritDoc}