You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@myfaces.apache.org by im...@apache.org on 2006/08/23 11:30:13 UTC

svn commit: r433992 - in /myfaces/tomahawk/trunk/sandbox/core/src/main/java/org/apache/myfaces/custom/ppr: PPRPanelGroup.java PPRPanelGroupRenderer.java PPRPanelGroupTag.java PPRPhaseListener.java

Author: imario
Date: Wed Aug 23 02:30:12 2006
New Revision: 433992

URL: http://svn.apache.org/viewvc?rev=433992&view=rev
Log:
prefixing charset issue in PPRPhaseListener
minor code cleanup - added log.isDebugEnabled

Modified:
    myfaces/tomahawk/trunk/sandbox/core/src/main/java/org/apache/myfaces/custom/ppr/PPRPanelGroup.java
    myfaces/tomahawk/trunk/sandbox/core/src/main/java/org/apache/myfaces/custom/ppr/PPRPanelGroupRenderer.java
    myfaces/tomahawk/trunk/sandbox/core/src/main/java/org/apache/myfaces/custom/ppr/PPRPanelGroupTag.java
    myfaces/tomahawk/trunk/sandbox/core/src/main/java/org/apache/myfaces/custom/ppr/PPRPhaseListener.java

Modified: myfaces/tomahawk/trunk/sandbox/core/src/main/java/org/apache/myfaces/custom/ppr/PPRPanelGroup.java
URL: http://svn.apache.org/viewvc/myfaces/tomahawk/trunk/sandbox/core/src/main/java/org/apache/myfaces/custom/ppr/PPRPanelGroup.java?rev=433992&r1=433991&r2=433992&view=diff
==============================================================================
--- myfaces/tomahawk/trunk/sandbox/core/src/main/java/org/apache/myfaces/custom/ppr/PPRPanelGroup.java (original)
+++ myfaces/tomahawk/trunk/sandbox/core/src/main/java/org/apache/myfaces/custom/ppr/PPRPanelGroup.java Wed Aug 23 02:30:12 2006
@@ -24,48 +24,46 @@
  */
 public class PPRPanelGroup extends HtmlPanelGroup
 {
-    private String _partialTriggers;
-
-    public static final String COMPONENT_TYPE = "org.apache.myfaces.PPRPanelGroup";
-
-    public static final String COMPONENT_FAMILY = "org.apache.myfaces.PPRPanelGroup";
-
-    public static final String DEFAULT_RENDERER_TYPE = "org.apache.myfaces.PPRPanelGroup";
-
-    public PPRPanelGroup()
-    {
-        setRendererType(DEFAULT_RENDERER_TYPE);
-    }
-
-    public String getFamily()
-    {
-        return COMPONENT_FAMILY;
-    }
-
-    public String getPartialTriggers()
-    {
-        return _partialTriggers;
-    }
-
-    public void setPartialTriggers(String partialTriggers)
-    {
-        this._partialTriggers = partialTriggers;
-    }
-
-    public void restoreState(FacesContext context, Object state)
-    {
-
-        Object[] values = (Object[]) state;
-        super.restoreState(context, values[0]);
-        _partialTriggers = (String) values[1];
-
-    }
-
-    public Object saveState(FacesContext context)
-    {
-        Object[] values = new Object[2];
-        values[0] = super.saveState(context);
-        values[1] = _partialTriggers;
-        return values;
-    }
+	public static final String COMPONENT_TYPE = "org.apache.myfaces.PPRPanelGroup";
+	public static final String COMPONENT_FAMILY = "org.apache.myfaces.PPRPanelGroup";
+	public static final String DEFAULT_RENDERER_TYPE = "org.apache.myfaces.PPRPanelGroup";
+
+	private String _partialTriggers;
+
+	public PPRPanelGroup()
+	{
+		setRendererType(DEFAULT_RENDERER_TYPE);
+	}
+
+	public String getFamily()
+	{
+		return COMPONENT_FAMILY;
+	}
+
+	public String getPartialTriggers()
+	{
+		return _partialTriggers;
+	}
+
+	public void setPartialTriggers(String partialTriggers)
+	{
+		this._partialTriggers = partialTriggers;
+	}
+
+	public void restoreState(FacesContext context, Object state)
+	{
+
+		Object[] values = (Object[]) state;
+		super.restoreState(context, values[0]);
+		_partialTriggers = (String) values[1];
+
+	}
+
+	public Object saveState(FacesContext context)
+	{
+		Object[] values = new Object[2];
+		values[0] = super.saveState(context);
+		values[1] = _partialTriggers;
+		return values;
+	}
 }

Modified: myfaces/tomahawk/trunk/sandbox/core/src/main/java/org/apache/myfaces/custom/ppr/PPRPanelGroupRenderer.java
URL: http://svn.apache.org/viewvc/myfaces/tomahawk/trunk/sandbox/core/src/main/java/org/apache/myfaces/custom/ppr/PPRPanelGroupRenderer.java?rev=433992&r1=433991&r2=433992&view=diff
==============================================================================
--- myfaces/tomahawk/trunk/sandbox/core/src/main/java/org/apache/myfaces/custom/ppr/PPRPanelGroupRenderer.java (original)
+++ myfaces/tomahawk/trunk/sandbox/core/src/main/java/org/apache/myfaces/custom/ppr/PPRPanelGroupRenderer.java Wed Aug 23 02:30:12 2006
@@ -15,21 +15,20 @@
  */
 package org.apache.myfaces.custom.ppr;
 
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.apache.myfaces.custom.dojo.DojoConfig;
+import org.apache.myfaces.custom.dojo.DojoUtils;
 import org.apache.myfaces.renderkit.html.ext.HtmlGroupRenderer;
 import org.apache.myfaces.renderkit.html.util.AddResource;
 import org.apache.myfaces.renderkit.html.util.AddResourceFactory;
-import org.apache.myfaces.shared_tomahawk.renderkit.html.HTML;
 import org.apache.myfaces.shared_tomahawk.renderkit.JSFAttr;
-import org.apache.myfaces.custom.dojo.DojoUtils;
-import org.apache.myfaces.custom.dojo.DojoConfig;
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
+import org.apache.myfaces.shared_tomahawk.renderkit.html.HTML;
 
+import javax.faces.component.UIComponent;
 import javax.faces.context.FacesContext;
 import javax.faces.context.ResponseWriter;
-import javax.faces.component.UIComponent;
 import javax.servlet.http.HttpServletRequest;
-
 import java.io.IOException;
 import java.util.Set;
 import java.util.StringTokenizer;
@@ -40,110 +39,122 @@
  */
 public class PPRPanelGroupRenderer extends HtmlGroupRenderer
 {
-    private static Log log = LogFactory.getLog(PPRPanelGroupRenderer.class);
-    private static final String MY_FACES_PPR_INITIALIZED = "/*MyFaces PPR initialized*/";
-    private static final String ADD_PARTIAL_TRIGGER_FUNCTION = "myFacesPPRCtrl.addPartialTrigger";
-    private static final String PPR_JS_FILE = "ppr.js";
-    private static final String BODY_SCRIPT_INFOS_ATTRIBUTE_NAME = "bodyScriptInfos";
-    private static final String MY_FACES_PPR_INIT_CODE =
-            "var myFacesPPRCtrl = new org.apache.myfaces.PPRCtrl(\"mainform\");";
-
-    public void encodeJavaScript(FacesContext facesContext, UIComponent uiComponent) throws IOException
-    {
-        if (!isInlineScriptSet(facesContext, MY_FACES_PPR_INITIALIZED)) {
-            String javascriptLocation = (String)uiComponent.getAttributes().get(JSFAttr.JAVASCRIPT_LOCATION);
-            AddResource addResource = AddResourceFactory.getInstance(facesContext);
-            DojoUtils.addMainInclude(facesContext, uiComponent, javascriptLocation, new DojoConfig());
-            DojoUtils.addRequire(facesContext, uiComponent, "dojo.io.*");
-            DojoUtils.addRequire(facesContext, uiComponent, "dojo.event.*");
-            addResource.addInlineScriptAtPosition(facesContext, AddResource.HEADER_BEGIN, MY_FACES_PPR_INITIALIZED);
-            
-            addResource.addJavaScriptAtPosition(facesContext, 
-            		AddResource.HEADER_BEGIN, 
-            		PPRPanelGroup.class,
-            		PPR_JS_FILE);
-            
-            writeInlineScript(facesContext,uiComponent,MY_FACES_PPR_INIT_CODE);
-        }
-    	String partialTriggerId=null;
-    	String partialTriggerClientId=null;
-    	UIComponent partialTriggerComponent=null;
-        String partialTriggers = ((PPRPanelGroup)uiComponent).getPartialTriggers();
-        String clientId = uiComponent.getClientId(facesContext);
-        StringTokenizer st = new StringTokenizer(partialTriggers, ",; ", false);
-        while (st.hasMoreTokens())
-        {
-            partialTriggerId = st.nextToken();
-            partialTriggerComponent = facesContext.getViewRoot().findComponent(partialTriggerId);
-            if(partialTriggerComponent != null)
-            {
-                partialTriggerClientId = partialTriggerComponent.getClientId(facesContext);
-                writeInlineScript(facesContext,uiComponent,
-                        ADD_PARTIAL_TRIGGER_FUNCTION +
-                        "('" +
-                        partialTriggerClientId +
-                        "','" +
-                        clientId +
-                        "');");
-            }
-            else
-            {
-                log.debug("PPRPanelGroupRenderer Component with id " + partialTriggerId + " not found!");
-            }
-        }
-
-    }
-
-    public void encodeEnd(FacesContext facesContext, UIComponent uiComponent) throws IOException
-    {
-        super.encodeEnd(facesContext, uiComponent);
-        if(uiComponent instanceof PPRPanelGroup){
-            if(((PPRPanelGroup)uiComponent).getPartialTriggers()!=null &&
-                    ((PPRPanelGroup)uiComponent).getPartialTriggers().length()>0)
-            {
-                encodeJavaScript(facesContext, uiComponent);
-            }
-        }
-    }
-
-    /**
-         * helper to write an inline javascript at the
-         * exact resource location of the call
-         * @param facesContext
-         * @param component
-         * @param script
-         * @throws IOException
-         */
-        private static void writeInlineScript(FacesContext facesContext, UIComponent component, String script) throws IOException {
-            ResponseWriter writer = facesContext.getResponseWriter();
-            writer.startElement(HTML.SCRIPT_ELEM, component);
-            writer.writeAttribute(HTML.TYPE_ATTR, HTML.SCRIPT_TYPE_TEXT_JAVASCRIPT, null);
-            writer.write(script);
-            writer.endElement(HTML.SCRIPT_ELEM);
-        }
-        
-        public static boolean isInlineScriptSet(FacesContext context, String inlineScript) {
-            HttpServletRequest request = (HttpServletRequest) context.getExternalContext().getRequest();
-            Set                set     = getBodyScriptInfos(request);
-
-            if (!set.contains(inlineScript)) {
-                set.add(inlineScript);
-
-                return false;
-            }
-
-            return true;
-        }
-        
-        private static Set getBodyScriptInfos(HttpServletRequest request) {
-            Set set = (Set) request.getAttribute(BODY_SCRIPT_INFOS_ATTRIBUTE_NAME);
-
-            if (set == null) {
-                set = new TreeSet();
-                request.setAttribute(BODY_SCRIPT_INFOS_ATTRIBUTE_NAME, set);
-            }
+	private static Log log = LogFactory.getLog(PPRPanelGroupRenderer.class);
+
+	private static final String MY_FACES_PPR_INITIALIZED = "/*MyFaces PPR initialized*/";
+	private static final String ADD_PARTIAL_TRIGGER_FUNCTION = "myFacesPPRCtrl.addPartialTrigger";
+	private static final String PPR_JS_FILE = "ppr.js";
+	private static final String BODY_SCRIPT_INFOS_ATTRIBUTE_NAME = "bodyScriptInfos";
+	private static final String MY_FACES_PPR_INIT_CODE =
+		"var myFacesPPRCtrl = new org.apache.myfaces.PPRCtrl(\"mainform\");";
+
+	public void encodeJavaScript(FacesContext facesContext, UIComponent uiComponent) throws IOException
+	{
+		if (!isInlineScriptSet(facesContext, MY_FACES_PPR_INITIALIZED))
+		{
+			String javascriptLocation = (String) uiComponent.getAttributes().get(JSFAttr.JAVASCRIPT_LOCATION);
+			AddResource addResource = AddResourceFactory.getInstance(facesContext);
+			DojoUtils.addMainInclude(facesContext, uiComponent, javascriptLocation, new DojoConfig());
+			DojoUtils.addRequire(facesContext, uiComponent, "dojo.io.*");
+			DojoUtils.addRequire(facesContext, uiComponent, "dojo.event.*");
+			addResource.addInlineScriptAtPosition(facesContext, AddResource.HEADER_BEGIN, MY_FACES_PPR_INITIALIZED);
+
+			addResource.addJavaScriptAtPosition(facesContext,
+				AddResource.HEADER_BEGIN,
+				PPRPanelGroup.class,
+				PPR_JS_FILE);
+
+			writeInlineScript(facesContext, uiComponent, MY_FACES_PPR_INIT_CODE);
+		}
+		String partialTriggerId = null;
+		String partialTriggerClientId = null;
+		UIComponent partialTriggerComponent = null;
+		String partialTriggers = ((PPRPanelGroup) uiComponent).getPartialTriggers();
+		String clientId = uiComponent.getClientId(facesContext);
+		StringTokenizer st = new StringTokenizer(partialTriggers, ",; ", false);
+		while (st.hasMoreTokens())
+		{
+			partialTriggerId = st.nextToken();
+			partialTriggerComponent = facesContext.getViewRoot().findComponent(partialTriggerId);
+			if (partialTriggerComponent != null)
+			{
+				partialTriggerClientId = partialTriggerComponent.getClientId(facesContext);
+				writeInlineScript(facesContext, uiComponent,
+					ADD_PARTIAL_TRIGGER_FUNCTION +
+						"('" +
+						partialTriggerClientId +
+						"','" +
+						clientId +
+						"');");
+			}
+			else
+			{
+				if (log.isDebugEnabled())
+				{
+					log.debug("PPRPanelGroupRenderer Component with id " + partialTriggerId + " not found!");
+				}
+			}
+		}
+
+	}
+
+	public void encodeEnd(FacesContext facesContext, UIComponent uiComponent) throws IOException
+	{
+		super.encodeEnd(facesContext, uiComponent);
+		if (uiComponent instanceof PPRPanelGroup)
+		{
+			if (((PPRPanelGroup) uiComponent).getPartialTriggers() != null &&
+				((PPRPanelGroup) uiComponent).getPartialTriggers().length() > 0)
+			{
+				encodeJavaScript(facesContext, uiComponent);
+			}
+		}
+	}
+
+	/**
+	 * helper to write an inline javascript at the
+	 * exact resource location of the call
+	 *
+	 * @param facesContext
+	 * @param component
+	 * @param script
+	 * @throws IOException
+	 */
+	private static void writeInlineScript(FacesContext facesContext, UIComponent component, String script) throws IOException
+	{
+		ResponseWriter writer = facesContext.getResponseWriter();
+		writer.startElement(HTML.SCRIPT_ELEM, component);
+		writer.writeAttribute(HTML.TYPE_ATTR, HTML.SCRIPT_TYPE_TEXT_JAVASCRIPT, null);
+		writer.write(script);
+		writer.endElement(HTML.SCRIPT_ELEM);
+	}
+
+	public static boolean isInlineScriptSet(FacesContext context, String inlineScript)
+	{
+		HttpServletRequest request = (HttpServletRequest) context.getExternalContext().getRequest();
+		Set set = getBodyScriptInfos(request);
+
+		if (!set.contains(inlineScript))
+		{
+			set.add(inlineScript);
+
+			return false;
+		}
+
+		return true;
+	}
+
+	private static Set getBodyScriptInfos(HttpServletRequest request)
+	{
+		Set set = (Set) request.getAttribute(BODY_SCRIPT_INFOS_ATTRIBUTE_NAME);
+
+		if (set == null)
+		{
+			set = new TreeSet();
+			request.setAttribute(BODY_SCRIPT_INFOS_ATTRIBUTE_NAME, set);
+		}
 
-            return set;
-        }
+		return set;
+	}
 
 }

Modified: myfaces/tomahawk/trunk/sandbox/core/src/main/java/org/apache/myfaces/custom/ppr/PPRPanelGroupTag.java
URL: http://svn.apache.org/viewvc/myfaces/tomahawk/trunk/sandbox/core/src/main/java/org/apache/myfaces/custom/ppr/PPRPanelGroupTag.java?rev=433992&r1=433991&r2=433992&view=diff
==============================================================================
--- myfaces/tomahawk/trunk/sandbox/core/src/main/java/org/apache/myfaces/custom/ppr/PPRPanelGroupTag.java (original)
+++ myfaces/tomahawk/trunk/sandbox/core/src/main/java/org/apache/myfaces/custom/ppr/PPRPanelGroupTag.java Wed Aug 23 02:30:12 2006
@@ -24,38 +24,39 @@
  */
 public class PPRPanelGroupTag extends HtmlPanelGroupTag
 {
-    private String _partialTriggers;
+	private String _partialTriggers;
 
-    public String getComponentType()
-    {
-        return PPRPanelGroup.COMPONENT_TYPE;
-    }
-
-    public String getRendererType()
-    {
-        return PPRPanelGroup.DEFAULT_RENDERER_TYPE;
-    }
-
-
-    public void release()
-    {
-        super.release();
-        _partialTriggers = null;
-    }
-     protected void setProperties(UIComponent component) {
-        super.setProperties(component);
-
-        setStringProperty(component, "partialTriggers", _partialTriggers);
-    }
-
-    public String getPartialTriggers()
-    {
-        return _partialTriggers;
-    }
-
-    public void setPartialTriggers(String partialTriggers)
-    {
-        this._partialTriggers = partialTriggers;
-    }
+	public String getComponentType()
+	{
+		return PPRPanelGroup.COMPONENT_TYPE;
+	}
+
+	public String getRendererType()
+	{
+		return PPRPanelGroup.DEFAULT_RENDERER_TYPE;
+	}
+
+	public void release()
+	{
+		super.release();
+		_partialTriggers = null;
+	}
+
+	protected void setProperties(UIComponent component)
+	{
+		super.setProperties(component);
+
+		setStringProperty(component, "partialTriggers", _partialTriggers);
+	}
+
+	public String getPartialTriggers()
+	{
+		return _partialTriggers;
+	}
+
+	public void setPartialTriggers(String partialTriggers)
+	{
+		this._partialTriggers = partialTriggers;
+	}
 
 }

Modified: myfaces/tomahawk/trunk/sandbox/core/src/main/java/org/apache/myfaces/custom/ppr/PPRPhaseListener.java
URL: http://svn.apache.org/viewvc/myfaces/tomahawk/trunk/sandbox/core/src/main/java/org/apache/myfaces/custom/ppr/PPRPhaseListener.java?rev=433992&r1=433991&r2=433992&view=diff
==============================================================================
--- myfaces/tomahawk/trunk/sandbox/core/src/main/java/org/apache/myfaces/custom/ppr/PPRPhaseListener.java (original)
+++ myfaces/tomahawk/trunk/sandbox/core/src/main/java/org/apache/myfaces/custom/ppr/PPRPhaseListener.java Wed Aug 23 02:30:12 2006
@@ -17,99 +17,106 @@
 
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
-import org.apache.myfaces.shared_tomahawk.renderkit.html.HtmlResponseWriterImpl;
 import org.apache.myfaces.shared_tomahawk.renderkit.RendererUtils;
+import org.apache.myfaces.shared_tomahawk.renderkit.html.HtmlResponseWriterImpl;
 
-import javax.faces.event.PhaseListener;
-import javax.faces.event.PhaseEvent;
-import javax.faces.event.PhaseId;
+import javax.faces.FacesException;
+import javax.faces.component.UIComponent;
+import javax.faces.component.UIViewRoot;
 import javax.faces.context.FacesContext;
 import javax.faces.context.ResponseWriter;
-import javax.faces.component.UIViewRoot;
-import javax.faces.component.UIComponent;
-import javax.servlet.ServletResponse;
+import javax.faces.event.PhaseEvent;
+import javax.faces.event.PhaseId;
+import javax.faces.event.PhaseListener;
 import javax.servlet.ServletRequest;
-import java.util.Map;
-import java.util.StringTokenizer;
+import javax.servlet.ServletResponse;
 import java.io.IOException;
 import java.io.PrintWriter;
+import java.util.Map;
+import java.util.StringTokenizer;
 
 /**
  * @author Ernst Fastl
  */
 public class PPRPhaseListener implements PhaseListener
 {
-    private static Log log = LogFactory.getLog(PPRPhaseListener.class);
-    private static final String PPR_PARAMETER = "org.apache.myfaces.PPRCtrl.ajaxRequest";
-    private static final String TRIGGERED_COMPONENTS_PARAMETER = "org.apache.myfaces.PPRCtrl.triggeredComponents";
-    private static final String XML_HEADER = "<?xml version=\"1.0\"?>\n";
-
-    public void afterPhase(PhaseEvent phaseEvent)
-    {
-    }
-
-    public void beforePhase(PhaseEvent event)
-    {
-        log.debug("In PPRPhaseListener beforePhase");
-        FacesContext context = event.getFacesContext();
-        Map externalRequestMap = context.getExternalContext().getRequestParameterMap();
-
-        if (externalRequestMap.containsKey(PPR_PARAMETER))
-        {
-            ServletResponse response =
-            (ServletResponse) context.getExternalContext().getResponse();
-            ServletRequest request =
-            (ServletRequest) context.getExternalContext().getRequest();
-            UIViewRoot viewRoot = context.getViewRoot();
-            ResponseWriter writer=context.getResponseWriter();
-            response.setContentType("text/xml;charset=utf-8");
-            response.setLocale(viewRoot.getLocale());
-            String triggeredComponents=(String) externalRequestMap.get(TRIGGERED_COMPONENTS_PARAMETER);
-            try
-            {
-                PrintWriter out = response.getWriter();
-                context.setResponseWriter(new HtmlResponseWriterImpl(out,
-                        null,
-                        request.getCharacterEncoding()));
-                out.print(XML_HEADER);
-                out.print("<response>\n");
-                encodeTriggeredComponents(out,triggeredComponents,viewRoot,context);
-                out.print("</response>");
-                out.flush();
-            } catch (IOException e)
-            {
-                e.printStackTrace();  //To change body of catch statement use File | Settings | File Templates.
-            }
-
-            context.responseComplete();
-        }
-    }
-
-    private void encodeTriggeredComponents(PrintWriter out, String triggeredComponents,UIViewRoot viewRoot,FacesContext context)
-    {
-        StringTokenizer st = new StringTokenizer(triggeredComponents, ",", false);
-        String clientId=null;
-        UIComponent component=null;
-        while (st.hasMoreTokens())
-        {
-            clientId = st.nextToken();
-            component = viewRoot.findComponent(clientId);
-            out.print("<component id=\"" +
-                    component.getClientId(context) +
-                    "\"><![CDATA[");
-            try
-            {
-                RendererUtils.renderChild(context,component);
-            } catch (IOException e)
-            {
-                e.printStackTrace();  //To change body of catch statement use File | Settings | File Templates.
-            }
-            out.print("]]></component>");
-        }
-    }
-
-    public PhaseId getPhaseId()
-    {
-        return PhaseId.RENDER_RESPONSE;
-    }
+	private static Log log = LogFactory.getLog(PPRPhaseListener.class);
+	private static final String PPR_PARAMETER = "org.apache.myfaces.PPRCtrl.ajaxRequest";
+	private static final String TRIGGERED_COMPONENTS_PARAMETER = "org.apache.myfaces.PPRCtrl.triggeredComponents";
+	private static final String XML_HEADER = "<?xml version=\"1.0\"?>\n";
+
+	public void afterPhase(PhaseEvent phaseEvent)
+	{
+	}
+
+	public void beforePhase(PhaseEvent event)
+	{
+		if (log.isDebugEnabled())
+		{
+			log.debug("In PPRPhaseListener beforePhase");
+		}
+
+		FacesContext context = event.getFacesContext();
+		Map externalRequestMap = context.getExternalContext().getRequestParameterMap();
+
+		if (externalRequestMap.containsKey(PPR_PARAMETER))
+		{
+			ServletResponse response =
+				(ServletResponse) context.getExternalContext().getResponse();
+			ServletRequest request =
+				(ServletRequest) context.getExternalContext().getRequest();
+			UIViewRoot viewRoot = context.getViewRoot();
+			ResponseWriter writer = context.getResponseWriter();
+			response.setContentType("text/xml;charset=" + request.getCharacterEncoding());
+			response.setLocale(viewRoot.getLocale());
+			String triggeredComponents = (String) externalRequestMap.get(TRIGGERED_COMPONENTS_PARAMETER);
+			try
+			{
+				PrintWriter out = response.getWriter();
+				context.setResponseWriter(new HtmlResponseWriterImpl(out,
+					null,
+					request.getCharacterEncoding()));
+				out.print(XML_HEADER);
+				out.print("<response>\n");
+				encodeTriggeredComponents(out, triggeredComponents, viewRoot, context);
+				out.print("</response>");
+				out.flush();
+			}
+			catch (IOException e)
+			{
+				throw new FacesException(e);
+			}
+
+			context.responseComplete();
+		}
+	}
+
+	private void encodeTriggeredComponents(PrintWriter out, String triggeredComponents, UIViewRoot viewRoot, FacesContext context)
+	{
+		StringTokenizer st = new StringTokenizer(triggeredComponents, ",", false);
+		String clientId = null;
+		UIComponent component = null;
+		while (st.hasMoreTokens())
+		{
+			clientId = st.nextToken();
+			component = viewRoot.findComponent(clientId);
+			out.print("<component id=\"" +
+				component.getClientId(context) +
+				"\"><![CDATA[");
+			try
+			{
+				RendererUtils.renderChild(context, component);
+			}
+			catch (IOException e)
+			{
+				throw new FacesException(e);
+			}
+			out.print("]]></component>");
+		}
+	}
+
+	public PhaseId getPhaseId()
+	{
+		return PhaseId.RENDER_RESPONSE;
+	}
 }