protected void doDecode(FacesContext facesContext, UIComponent uiComponent) {

    // super.decode must not be called, because value is handled here
    if (isSubmitted(facesContext, uiComponent)) {
      ActionEvent event;
      event = new ActionEvent(uiComponent);
      uiComponent.queueEvent(event);
      uiComponent.queueEvent(new AjaxEvent(uiComponent));
      // Check areas for processing
      if (uiComponent instanceof AjaxComponent) {
        AjaxComponent ajaxComponent = (AjaxComponent) uiComponent;
        Set<String> toProcess = AjaxRendererUtils.asSet(ajaxComponent.getProcess());
        if (null != toProcess) {
          HashSet<String> componentIdsToProcess = new HashSet<String>();
          for (String componentId : toProcess) {
            UIComponent component = getUtils().findComponentFor(uiComponent, componentId);
            if (null != component) {
              componentIdsToProcess.add(component.getClientId(facesContext));
            } else {
              componentIdsToProcess.add(componentId);
            }
          }
          AjaxContext.getCurrentInstance(facesContext).setAjaxAreasToProcess(componentIdsToProcess);
        }
      }
    }
  }
 public String getOnClick(FacesContext context, UIComponent component) {
   StringBuffer onClick;
   if (!getUtils().isBooleanAttribute(component, "disabled")) {
     onClick = AjaxRendererUtils.buildOnClick(component, context);
     if (!"reset".equals(component.getAttributes().get("type"))) {
       onClick.append(";return false;");
     }
   } else {
     onClick = new StringBuffer("return false;");
   }
   return onClick.toString();
 }