Package org.richfaces.taglib

Source Code of org.richfaces.taglib.AjaxValidatorTagBase

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

import javax.el.ValueExpression;
import javax.faces.component.EditableValueHolder;
import javax.faces.component.UIComponent;
import javax.faces.context.FacesContext;
import javax.faces.webapp.UIComponentClassicTagBase;
import javax.servlet.jsp.JspException;

import org.ajax4jsf.webapp.taglib.UIComponentTagBase;
import org.richfaces.component.UIBeanValidator;
import org.richfaces.renderkit.html.BeanValidatorRenderer;
import org.richfaces.validator.FacesBeanValidator;

/**
* @author asmirnov
*
*/
public class AjaxValidatorTagBase extends UIComponentTagBase {

  /**
   * Generate script for given event ( onclick, onenter ... )
   */
  private String event = null;

  private ValueExpression summary = null;

  /*
   * (non-Javadoc)
   *
   * @see javax.faces.webapp.UIComponentTagBase#getComponentType()
   */
  @Override
  public String getComponentType() {
    return UIBeanValidator.COMPONENT_TYPE;
  }

  /**
   * @param event
   *            the event to set
   */
  public void setEvent(String event) {
    this.event = event;
  }

  /**
   * @param summary
   *            the summary to set
   */
  public void setSummary(ValueExpression summary) {
    this.summary = summary;
  }

  @Override
  public int doStartTag() throws JspException {
    // Locate our parent UIComponentTag
    UIComponentClassicTagBase tag = UIComponentClassicTagBase
        .getParentUIComponentClassicTagBase(pageContext);
    if (tag == null) {
      // PENDING i18n
      throw new JspException(
          "Not nested in a UIComponentTag Error for tag with handler class:"
              + this.getClass().getName());
    }
    UIComponent component = tag.getComponentInstance();
    if (!(component instanceof EditableValueHolder)) {
      // PENDING i18n
      throw new JspException(
          "Not nested in a UIInput  component. Error for tag with handler class:"
              + this.getClass().getName());

    }
    // Nothing to do unless this tag created a component
    if (tag.getCreated()) {
      // 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);
      }
      ((EditableValueHolder) component).addValidator(validator);

    }
    return super.doStartTag();
  }

  @Override
  protected void setProperties(UIComponent component) {
    super.setProperties(component);
    setStringProperty(component, "event", event);
  }

  @Override
  public void release() {
    super.release();
    event = null;
    summary = null;
  }

  /*
   * (non-Javadoc)
   *
   * @see javax.faces.webapp.UIComponentTagBase#getRendererType()
   */
  @Override
  public String getRendererType() {
    return BeanValidatorRenderer.RENDERER_TYPE;
  }

  @Override
  protected String getFacetName() {
    return UIBeanValidator.BEAN_VALIDATOR_FACET
        + (null == event ? "" : event);
  }
}
TOP

Related Classes of org.richfaces.taglib.AjaxValidatorTagBase

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.