Package org.richfaces.taglib

Source Code of org.richfaces.taglib.AjaxValidatorHandler

/**
*
*/
package org.richfaces.taglib;

import java.io.IOException;

import javax.el.ELException;
import javax.faces.FacesException;
import javax.faces.component.EditableValueHolder;
import javax.faces.component.UIComponent;
import javax.faces.component.UIComponentBase;
import javax.faces.context.FacesContext;

import org.ajax4jsf.webapp.taglib.AjaxComponentHandler;
import org.richfaces.component.UIBeanValidator;
import org.richfaces.validator.FacesBeanValidator;

import com.sun.facelets.FaceletContext;
import com.sun.facelets.FaceletException;
import com.sun.facelets.tag.TagAttribute;
import com.sun.facelets.tag.TagException;
import com.sun.facelets.tag.TagHandler;
import com.sun.facelets.tag.jsf.ComponentConfig;

/**
* @author asmirnov
*
*/
public class AjaxValidatorHandler extends TagHandler {

  /**
   * A UIComponent for capturing a child UIComponent, representative of the
   * desired Facet
   *
   * @author Jacob Hookom
   *
   */
  private final static class UIFacet extends UIComponentBase {
    public String getFamily() {
      return null;
    }
  }

  private TagAttribute _event;
  private TagAttribute _summary;
  private AjaxComponentHandler _validatorHandler;

  /**
   * @param config
   */
  public AjaxValidatorHandler(ComponentConfig config) {
    super(config);
    _event = getAttribute("event");
    _summary = getAttribute("summary");
    _validatorHandler = new AjaxComponentHandler(config);
  }

  /*
   * (non-Javadoc)
   *
   * @see
   * com.sun.facelets.FaceletHandler#apply(com.sun.facelets.FaceletContext,
   * javax.faces.component.UIComponent)
   */
  public void apply(FaceletContext ctx, UIComponent parent)
      throws IOException, FacesException, FaceletException, ELException {
    if (parent == null || !(parent instanceof EditableValueHolder)) {
      throw new TagException(this.tag,
          "Parent not an instance of EditableValueHolder: " + parent);
    }
    if (null == parent.getParent()) {
      // New created component, add validator.
      FacesContext facesContext = FacesContext.getCurrentInstance();
      FacesBeanValidator validator = (FacesBeanValidator) facesContext
          .getApplication().createValidator(
              FacesBeanValidator.BEAN_VALIDATOR_TYPE);
      if (null != _summary) {
          validator.setSummary(_summary.getValueExpression(ctx, String.class));
      }
      ((EditableValueHolder) parent).addValidator(validator);
    }
    if (null != this._event) {
      UIComponent c;
      UIFacet facet = new UIFacet();
      // Find facet for client validation component
      String eventName = _event.getValue();
      String facetName = UIBeanValidator.BEAN_VALIDATOR_FACET + eventName;
      c = parent.getFacet(facetName);
      if (null != c) {
        parent.getFacets().remove(facetName);
        facet.getChildren().add(c);
      }
      this._validatorHandler.apply(ctx, facet);
      c = (UIComponent) facet.getChildren().get(0);
      parent.getFacets().put(facetName, c);

    }
  }

}
TOP

Related Classes of org.richfaces.taglib.AjaxValidatorHandler

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.