Package org.ajax4jsf.renderkit

Source Code of org.ajax4jsf.renderkit.AjaxContainerRenderer

/**
* License Agreement.
*
* Rich Faces - Natural Ajax for Java Server Faces (JSF)
*
* Copyright (C) 2007 Exadel, Inc.
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License version 2.1 as published by the Free Software Foundation.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301  USA
*/

package org.ajax4jsf.renderkit;

import java.io.IOException;
import java.util.Map;
import java.util.Set;

import javax.faces.component.NamingContainer;
import javax.faces.component.UIComponent;
import javax.faces.context.FacesContext;

import org.ajax4jsf.Messages;
import org.ajax4jsf.component.AjaxContainer;
import org.ajax4jsf.context.AjaxContext;
import org.ajax4jsf.event.AjaxEvent;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;

/**
* Base renderer for all AJAX - subview components.
*
* @author asmirnov@exadel.com (latest modification by $Author: alexsmirnov $)
* @version $Revision: 1.1.2.3 $ $Date: 2007/02/08 15:02:02 $
*
*/
public class AjaxContainerRenderer extends AjaxChildrenRenderer {

  public static final String AJAX_PARAMETER_NAME = "AJAXREQUEST";

  public static final String AJAX_JSF_SCRIPT = "AJAX.js";

  public static final String SARISSA_SCRIPT = "sarissa.js";

  public static final String JSDOM_SCRIPT = "JSDOM_sarissa.js";

  public static final String AJAX_VIEW_STATE_TAG = "span";

  public static final String AJAX_VIEW_STATE_ID = "ajax-view-state";

  public static final String AJAX_RESULT_GROUP_TAG = "meta";

  public static final String AJAX_RESULT_GROUP_ATTR = "content";

  public static final String AJAX_RESULT_STYLE = "display: none";

  public static final String AJAX_UPDATE_HEADER = "Ajax-Update-Ids";

  static final Log log = LogFactory.getLog(AjaxContainerRenderer.class);

  public static final String AJAX_FLAG_HEADER = "Ajax-Response";

  public static final String AJAX_LOCATION_HEADER = "Location";

  /*
   * (non-Javadoc)
   *
   * @see org.ajax4jsf.renderkit.RendererBase#getComponentClass()
   */
  @SuppressWarnings("unchecked")
  protected Class getComponentClass() {
    // TODO Auto-generated method stub
    return AjaxContainer.class;
  }

  /**
   *
   *
   * @see javax.faces.component.UIComponent#encodeChildren(javax.faces.context.FacesContext)
   *      Since main function of component - render subset of components, for
   *      update on page,don't delegate this for renderer.
   *
   */
  public void encodeChildren(FacesContext context, UIComponent component)
      throws IOException {
    // Normal request - render all ...
    log.debug(Messages.getMessage(Messages.RENDER_CHILDREN_NON_AJAX_INFO));
    renderChildren(context, component);
  }

  /**
   * @param context
   * @param component
   * @throws IOException
   */
  public void encodeAjax(FacesContext context, UIComponent component)
      throws IOException {
    UIComponent root;
    // Iterate over all childrens, render it if nessesary...
    log.debug(Messages.getMessage(Messages.RENDER_CHILDREN_AJAX_INFO));
    AjaxContext ajaxContext = AjaxContext.getCurrentInstance(context);
    Set<String> ids = ajaxContext.getAjaxAreasToRender();
    Set<String> renderedAreas = ajaxContext.getAjaxRenderedAreas();
    if (((AjaxContainer) component).isRenderRegionOnly()) {
      root = component;
    } else {
      root = context.getViewRoot();
    }
    String path = AjaxRendererUtils.getAbsoluteId(root);
    // if(! (component instanceof NamingContainer)){
    path = path.substring(0, path
        .lastIndexOf(NamingContainer.SEPARATOR_CHAR) + 1);
    if (isParentRendered(root)) {
      encodeAjaxComponent(context, root, path, ids, renderedAreas);
    }
    // Write information about encoded areas after submission.
    AjaxRendererUtils.encodeAreas(context, component);
  }

  public boolean isParentRendered(UIComponent target) {
    UIComponent component = target;

    while (component != null) {
      if (!component.isRendered()) {
        return false;
      }
      component = component.getParent();
    }
    return true;
  }

  /*
   * always return true, since component must maintain set of rendered
   * components.
   *
   * @see javax.faces.component.UIComponent#getRendersChildren()
   */
  public boolean getRendersChildren() {
    return false;
  }

  /*
   * (non-Javadoc)
   *
   * @see
   * org.ajax4jsf.renderkit.RendererBase#doDecode(javax.faces.context.FacesContext
   * , javax.faces.component.UIComponent)
   */
  protected void doDecode(FacesContext context, UIComponent component) {
    String clientId = component.getClientId(context);
    Map<String, String> paramMap = context.getExternalContext()
        .getRequestParameterMap();
    if (log.isDebugEnabled()) {
      log.debug(Messages.getMessage(
          Messages.DECODE_AJAX_REQUEST_STATUS_INFO, clientId));
      // log.debug(Messages.getMessage(Messages.REQUEST_PARAMETERS_MAP,
      // paramMap.toString()));
    }
    Object ajaxParameter = paramMap.get(AJAX_PARAMETER_NAME);
    AjaxContainer ajaxContainer = (AjaxContainer) component;
    if (null != ajaxParameter && ajaxParameter.equals(clientId)) {
      ajaxContainer.setSubmitted(true);
      if (ajaxContainer.isSelfRendered()) {
        AjaxContext.getCurrentInstance(context).setSelfRender(true);
      }
      AjaxEvent event = new AjaxEvent(component);
      component.queueEvent(event);
    } else {
      ajaxContainer.setSubmitted(false);
    }

  }

}
TOP

Related Classes of org.ajax4jsf.renderkit.AjaxContainerRenderer

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.