You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@myfaces.apache.org by lu...@apache.org on 2012/12/12 21:02:58 UTC

svn commit: r1420939 [2/2] - in /myfaces/core/branches/2.1.x-client-window: ./ api/src/main/java/javax/faces/component/ api/src/main/javascript/META-INF/resources/myfaces/_impl/_util/ api/src/main/javascript/META-INF/resources/myfaces/_impl/xhrCore/ im...

Modified: myfaces/core/branches/2.1.x-client-window/impl/src/test/java/org/apache/myfaces/mc/test/core/AbstractMyFacesTestCase.java
URL: http://svn.apache.org/viewvc/myfaces/core/branches/2.1.x-client-window/impl/src/test/java/org/apache/myfaces/mc/test/core/AbstractMyFacesTestCase.java?rev=1420939&r1=1420938&r2=1420939&view=diff
==============================================================================
--- myfaces/core/branches/2.1.x-client-window/impl/src/test/java/org/apache/myfaces/mc/test/core/AbstractMyFacesTestCase.java (original)
+++ myfaces/core/branches/2.1.x-client-window/impl/src/test/java/org/apache/myfaces/mc/test/core/AbstractMyFacesTestCase.java Wed Dec 12 20:02:51 2012
@@ -34,13 +34,23 @@ import java.util.logging.Logger;
 import javax.el.ExpressionFactory;
 import javax.faces.FacesException;
 import javax.faces.FactoryFinder;
+import javax.faces.application.Application;
+import javax.faces.application.FacesMessage;
+import javax.faces.application.ProjectStage;
+import javax.faces.application.ViewHandler;
+import javax.faces.component.UIViewRoot;
 import javax.faces.context.ExternalContext;
 import javax.faces.context.FacesContext;
 import javax.faces.context.FacesContextFactory;
+import javax.faces.context.Flash;
+import javax.faces.event.ExceptionQueuedEvent;
+import javax.faces.event.ExceptionQueuedEventContext;
 import javax.faces.event.PhaseId;
 import javax.faces.event.PhaseListener;
+import javax.faces.event.PreRenderViewEvent;
 import javax.faces.lifecycle.Lifecycle;
 import javax.faces.lifecycle.LifecycleFactory;
+import javax.faces.view.ViewDeclarationLanguage;
 import javax.faces.webapp.FacesServlet;
 import javax.servlet.ServletContext;
 import javax.servlet.ServletContextEvent;
@@ -52,6 +62,7 @@ import org.apache.myfaces.config.Runtime
 import org.apache.myfaces.config.element.FacesConfig;
 import org.apache.myfaces.config.impl.digester.elements.Factory;
 import org.apache.myfaces.lifecycle.LifecycleImpl;
+import org.apache.myfaces.lifecycle.ViewNotFoundException;
 import org.apache.myfaces.mc.test.core.annotation.DeclareFacesConfig;
 import org.apache.myfaces.mc.test.core.annotation.ManagedBeans;
 import org.apache.myfaces.mc.test.core.annotation.PageBean;
@@ -62,6 +73,7 @@ import org.apache.myfaces.test.el.MockEx
 import org.apache.myfaces.test.mock.MockPrintWriter;
 import org.apache.myfaces.test.mock.MockServletConfig;
 import org.apache.myfaces.test.mock.MockServletContext;
+import org.apache.myfaces.util.DebugUtils;
 import org.apache.myfaces.view.facelets.FaceletViewDeclarationLanguage;
 import org.apache.myfaces.webapp.AbstractFacesInitializer;
 import org.apache.myfaces.webapp.StartupServletContextListener;
@@ -99,6 +111,13 @@ public abstract class AbstractMyFacesTes
     
     public static final String LAST_PHASE_PROCESSED = "oam.LAST_PHASE_PROCESSED";
     
+    public static final String LAST_RENDER_PHASE_STEP = "oam.LAST_RENDER_PHASE_STEP";
+    
+    public static final int BEFORE_RENDER_STEP = 1;
+    public static final int BUILD_VIEW_CYCLE_STEP = 2;
+    public static final int VIEWHANDLER_RENDER_STEP = 3;
+    public static final int AFTER_RENDER_STEP = 4;
+    
     // ------------------------------------------------------------ Constructors
 
     /**
@@ -446,6 +465,7 @@ public abstract class AbstractMyFacesTes
         processRemainingExecutePhases(facesContext);
         lifecycle.render(facesContext);
         facesContext.getAttributes().put(LAST_PHASE_PROCESSED, PhaseId.RENDER_RESPONSE);
+        facesContext.getAttributes().put(LAST_RENDER_PHASE_STEP, AFTER_RENDER_STEP);
     }
     
     protected void processRemainingExecutePhases(FacesContext facesContext) throws Exception
@@ -516,7 +536,29 @@ public abstract class AbstractMyFacesTes
             }
             if (continueProcess || PhaseId.INVOKE_APPLICATION.equals(lastPhaseId))
             {
-                processRender(facesContext);
+                Integer step = (Integer) facesContext.getAttributes().get(LAST_RENDER_PHASE_STEP);
+                if (step == null)
+                {
+                    processRender(facesContext);
+                }
+                else
+                {
+                    if (BEFORE_RENDER_STEP == step.intValue())
+                    {
+                        executeBuildViewCycle(facesContext);
+                        executeViewHandlerRender(facesContext);
+                        executeAfterRender(facesContext);
+                    }
+                    else if (BUILD_VIEW_CYCLE_STEP == step.intValue())
+                    {
+                        executeViewHandlerRender(facesContext);
+                        executeAfterRender(facesContext);
+                    }
+                    else if (VIEWHANDLER_RENDER_STEP == step.intValue())
+                    {
+                        executeAfterRender(facesContext);
+                    }
+                }
             }
         }
     }
@@ -532,6 +574,291 @@ public abstract class AbstractMyFacesTes
         return false;
     }
     
+    protected void executeBeforeRender(FacesContext facesContext) throws Exception
+    {
+        if (lifecycle instanceof LifecycleImpl)
+        {
+            LifecycleImpl lifecycleImpl = (LifecycleImpl) lifecycle;
+            
+            Object phaseExecutor = null;
+            Field renderExecutorField = lifecycleImpl.getClass().getDeclaredField("renderExecutor");
+            if (!renderExecutorField.isAccessible())
+            {
+                renderExecutorField.setAccessible(true);
+            }
+            phaseExecutor = renderExecutorField.get(lifecycleImpl);
+            
+            if (facesContext.getResponseComplete())
+            {
+                return;
+            }
+            
+            Object phaseManager = facesContext.getAttributes().get(PHASE_MANAGER_INSTANCE);
+            if (phaseManager == null)
+            {
+                Method getPhaseListenersMethod = lifecycleImpl.getClass().getDeclaredMethod("getPhaseListeners");
+                if (!getPhaseListenersMethod.isAccessible())
+                {
+                    getPhaseListenersMethod.setAccessible(true);
+                }
+                
+                Constructor<?> plmc = PHASE_MANAGER_CLASS.getDeclaredConstructor(new Class[]{Lifecycle.class, FacesContext.class, PhaseListener[].class});
+                if (!plmc.isAccessible())
+                {
+                    plmc.setAccessible(true);
+                }
+                phaseManager = plmc.newInstance(lifecycle, facesContext, getPhaseListenersMethod.invoke(lifecycleImpl, null));
+                facesContext.getAttributes().put(PHASE_MANAGER_INSTANCE, phaseManager);
+            }
+            
+            Flash flash = facesContext.getExternalContext().getFlash();
+            
+            try
+            {
+                facesContext.setCurrentPhaseId(PhaseId.RENDER_RESPONSE);
+                
+                flash.doPrePhaseActions(facesContext);
+                
+                // let the PhaseExecutor do some pre-phase actions
+                
+                //renderExecutor.doPrePhaseActions(facesContext);
+                Method doPrePhaseActionsMethod = phaseExecutor.getClass().getMethod("doPrePhaseActions", FacesContext.class);
+                if(!(doPrePhaseActionsMethod.isAccessible()))
+                {
+                    doPrePhaseActionsMethod.setAccessible(true);
+                }
+                doPrePhaseActionsMethod.invoke(phaseExecutor, facesContext);
+                
+                //phaseListenerMgr.informPhaseListenersBefore(PhaseId.RENDER_RESPONSE);
+                Method informPhaseListenersBeforeMethod = phaseManager.getClass().getDeclaredMethod("informPhaseListenersBefore", PhaseId.class);
+                if(!(informPhaseListenersBeforeMethod.isAccessible()))
+                {
+                    informPhaseListenersBeforeMethod.setAccessible(true);
+                }
+                informPhaseListenersBeforeMethod.invoke(phaseManager, PhaseId.RENDER_RESPONSE);
+                
+                // also possible that one of the listeners completed the response
+                if (facesContext.getResponseComplete())
+                {
+                    return;
+                }
+                
+                //renderExecutor.execute(facesContext);
+            }
+            
+            catch (Throwable e)
+            {
+                // JSF 2.0: publish the executor's exception (if any).
+                ExceptionQueuedEventContext context = new ExceptionQueuedEventContext (facesContext, e, null, PhaseId.RENDER_RESPONSE);
+                facesContext.getApplication().publishEvent (facesContext, ExceptionQueuedEvent.class, context);
+            }
+            
+            finally
+            {
+                /*
+                phaseListenerMgr.informPhaseListenersAfter(renderExecutor.getPhase());
+                flash.doPostPhaseActions(facesContext);
+                
+                // publish a field in the application map to indicate
+                // that the first request has been processed
+                requestProcessed(facesContext);
+                */
+            }
+            
+            facesContext.getExceptionHandler().handle();
+            
+
+            facesContext.getAttributes().remove(PHASE_MANAGER_INSTANCE);
+            
+            facesContext.getAttributes().put(LAST_RENDER_PHASE_STEP, BEFORE_RENDER_STEP);
+        }
+        else
+        {
+            throw new UnsupportedOperationException("Cannot execute phase on custom lifecycle instances");
+        }
+    }
+    
+    public void executeBuildViewCycle(FacesContext facesContext) throws Exception
+    {
+        Application application = facesContext.getApplication();
+        ViewHandler viewHandler = application.getViewHandler();
+        UIViewRoot root;
+        UIViewRoot previousRoot;
+        String viewId;
+        String newViewId;
+        boolean isNotSameRoot;
+        int loops = 0;
+        int maxLoops = 15;
+        
+        if (facesContext.getViewRoot() == null)
+        {
+            throw new ViewNotFoundException("A view is required to execute "+facesContext.getCurrentPhaseId());
+        }
+        
+        try
+        {
+            // do-while, because the view might change in PreRenderViewEvent-listeners
+            do
+            {
+                root = facesContext.getViewRoot();
+                previousRoot = root;
+                viewId = root.getViewId();
+                
+                ViewDeclarationLanguage vdl = viewHandler.getViewDeclarationLanguage(
+                        facesContext, viewId);
+                if (vdl != null)
+                {
+                    vdl.buildView(facesContext, root);
+                }
+                
+                // publish a PreRenderViewEvent: note that the event listeners
+                // of this event can change the view, so we have to perform the algorithm 
+                // until the viewId does not change when publishing this event.
+                application.publishEvent(facesContext, PreRenderViewEvent.class, root);
+                
+                // was the response marked as complete by an event listener?
+                if (facesContext.getResponseComplete())
+                {
+                    return;
+                }
+
+                root = facesContext.getViewRoot();
+                
+                newViewId = root.getViewId();
+                
+                isNotSameRoot = !( (newViewId == null ? newViewId == viewId : newViewId.equals(viewId) ) && 
+                        previousRoot.equals(root) ); 
+                
+                loops++;
+            }
+            while ((newViewId == null && viewId != null) 
+                    || (newViewId != null && (!newViewId.equals(viewId) || isNotSameRoot ) ) && loops < maxLoops);
+            
+            if (loops == maxLoops)
+            {
+                // PreRenderView reach maxLoops - probably a infinitive recursion:
+                boolean production = facesContext.isProjectStage(ProjectStage.Production);
+                /*
+                Level level = production ? Level.FINE : Level.WARNING;
+                if (log.isLoggable(level))
+                {
+                    log.log(level, "Cicle over buildView-PreRenderViewEvent on RENDER_RESPONSE phase "
+                                   + "reaches maximal limit, please check listeners for infinite recursion.");
+                }*/
+            }
+            
+            facesContext.getAttributes().put(LAST_RENDER_PHASE_STEP, BUILD_VIEW_CYCLE_STEP);
+        }
+        catch (IOException e)
+        {
+            throw new FacesException(e.getMessage(), e);
+        }
+    }
+    
+    public void executeViewHandlerRender(FacesContext facesContext)
+    {
+        Application application = facesContext.getApplication();
+        ViewHandler viewHandler = application.getViewHandler();
+
+        try
+        {
+            viewHandler.renderView(facesContext, facesContext.getViewRoot());
+            
+            // log all unhandled FacesMessages, don't swallow them
+            // perf: org.apache.myfaces.context.servlet.FacesContextImpl.getMessageList() creates
+            // new Collections.unmodifiableList with every invocation->  call it only once
+            // and messageList is RandomAccess -> use index based loop
+            List<FacesMessage> messageList = facesContext.getMessageList();
+            if (!messageList.isEmpty())
+            {
+                StringBuilder builder = new StringBuilder();
+                //boolean shouldLog = false;
+                for (int i = 0, size = messageList.size(); i < size; i++)
+                {
+                    FacesMessage message = messageList.get(i);
+                    if (!message.isRendered())
+                    {
+                        builder.append("\n- ");
+                        builder.append(message.getDetail());
+                        
+                        //shouldLog = true;
+                    }
+                }
+                /*
+                if (shouldLog)
+                {
+                    log.log(Level.WARNING, "There are some unhandled FacesMessages, " +
+                            "this means not every FacesMessage had a chance to be rendered.\n" +
+                            "These unhandled FacesMessages are: " + builder.toString());
+                }*/
+            }
+            facesContext.getAttributes().put(LAST_RENDER_PHASE_STEP, VIEWHANDLER_RENDER_STEP);
+        }
+        catch (IOException e)
+        {
+            throw new FacesException(e.getMessage(), e);
+        }
+    }
+    
+    public void executeAfterRender(FacesContext facesContext) throws Exception
+    {
+        if (lifecycle instanceof LifecycleImpl)
+        {
+            LifecycleImpl lifecycleImpl = (LifecycleImpl) lifecycle;
+            
+            Object phaseExecutor = null;
+            Field renderExecutorField = lifecycleImpl.getClass().getDeclaredField("renderExecutor");
+            if (!renderExecutorField.isAccessible())
+            {
+                renderExecutorField.setAccessible(true);
+            }
+            phaseExecutor = renderExecutorField.get(lifecycleImpl);
+            
+            Object phaseManager = facesContext.getAttributes().get(PHASE_MANAGER_INSTANCE);
+            if (phaseManager == null)
+            {
+                Method getPhaseListenersMethod = lifecycleImpl.getClass().getDeclaredMethod("getPhaseListeners");
+                if (!getPhaseListenersMethod.isAccessible())
+                {
+                    getPhaseListenersMethod.setAccessible(true);
+                }
+                
+                Constructor<?> plmc = PHASE_MANAGER_CLASS.getDeclaredConstructor(new Class[]{Lifecycle.class, FacesContext.class, PhaseListener[].class});
+                if (!plmc.isAccessible())
+                {
+                    plmc.setAccessible(true);
+                }
+                phaseManager = plmc.newInstance(lifecycle, facesContext, getPhaseListenersMethod.invoke(lifecycleImpl, null));
+                facesContext.getAttributes().put(PHASE_MANAGER_INSTANCE, phaseManager);
+            }
+            
+            
+            Flash flash = facesContext.getExternalContext().getFlash();
+            
+            //phaseListenerMgr.informPhaseListenersAfter(renderExecutor.getPhase());
+            Method informPhaseListenersAfterMethod = phaseManager.getClass().getDeclaredMethod("informPhaseListenersAfter", PhaseId.class);
+            if(!(informPhaseListenersAfterMethod.isAccessible()))
+            {
+                informPhaseListenersAfterMethod.setAccessible(true);
+            }
+            informPhaseListenersAfterMethod.invoke(phaseManager, PhaseId.RENDER_RESPONSE);
+            
+            flash.doPostPhaseActions(facesContext);
+            
+            facesContext.getExceptionHandler().handle();
+
+            facesContext.getAttributes().remove(PHASE_MANAGER_INSTANCE);
+            
+            facesContext.getAttributes().put(LAST_RENDER_PHASE_STEP, AFTER_RENDER_STEP);
+            //End render response phase
+            facesContext.getAttributes().put(LAST_PHASE_PROCESSED, PhaseId.RENDER_RESPONSE);
+        }
+        else
+        {
+            throw new UnsupportedOperationException("Cannot execute phase on custom lifecycle instances");
+        }
+    }
+    
     /**
      * Execute an specified phase, doing some reflection over LifecycleImpl.
      * 

Modified: myfaces/core/branches/2.1.x-client-window/impl/src/test/java/org/apache/myfaces/view/facelets/pss/acid/AcidMyFacesRequestTestCase.java
URL: http://svn.apache.org/viewvc/myfaces/core/branches/2.1.x-client-window/impl/src/test/java/org/apache/myfaces/view/facelets/pss/acid/AcidMyFacesRequestTestCase.java?rev=1420939&r1=1420938&r2=1420939&view=diff
==============================================================================
--- myfaces/core/branches/2.1.x-client-window/impl/src/test/java/org/apache/myfaces/view/facelets/pss/acid/AcidMyFacesRequestTestCase.java (original)
+++ myfaces/core/branches/2.1.x-client-window/impl/src/test/java/org/apache/myfaces/view/facelets/pss/acid/AcidMyFacesRequestTestCase.java Wed Dec 12 20:02:51 2012
@@ -22,12 +22,14 @@ import javax.faces.application.StateMana
 import javax.faces.component.UICommand;
 import javax.faces.component.UIComponent;
 import javax.faces.component.UIInput;
+import javax.faces.component.UIPanel;
 import javax.faces.component.html.HtmlDataTable;
 
 import junit.framework.Assert;
 
 import org.apache.myfaces.mc.test.core.AbstractMyFacesRequestTestCase;
 import org.apache.myfaces.shared.config.MyfacesConfig;
+import org.apache.myfaces.view.facelets.pss.acid.managed.ResourceDependencyBean;
 import org.junit.Test;
 
 public class AcidMyFacesRequestTestCase extends AbstractMyFacesRequestTestCase
@@ -418,4 +420,92 @@ public class AcidMyFacesRequestTestCase 
         //Check it is restored
         Assert.assertNotNull(component);
     }
+    
+    /**
+     * Check if a dynamic subtree can be created from a binding property, and if it
+     * will be preserved across request. 
+     * 
+     * The idea is just inject a subtree using some code like this:
+     * <code>&lt;h:panelGroup id="panel" binding="#{componentBindingBean.panel}"&gt;</code>
+     * 
+     * The solution is if a binding returns a component that has children or facets
+     * attached, it is not elegible for PSS algorithm because the additional components
+     * are created outside facelets control, and there is no warrant that the same structure
+     * will be generated across requests, violating PSS base principle (it is possible to
+     * restore to the initial state calling vdl.buildView).
+     * 
+     * This test is here because all state saving modes should support this method.
+     * 
+     * @throws Exception 
+     */
+    @Test
+    public void testComponentBinding() throws Exception
+    {
+        setupRequest("/componentBinding1.xhtml");
+        processLifecycleExecuteAndRender();
+        
+        UIComponent comp = facesContext.getViewRoot().findComponent("panel");
+        Assert.assertNotNull(comp);
+        Assert.assertEquals(1, comp.getChildCount());
+        
+        UICommand button = (UICommand) facesContext.getViewRoot().findComponent("mainForm:postback");
+        submit(button);
+        processLifecycleExecuteAndRender();
+        
+        comp = facesContext.getViewRoot().findComponent("panel");
+        
+        Assert.assertEquals("value1", comp.getAttributes().get("attr1"));
+        Assert.assertEquals("value2", comp.getChildren().get(0).getAttributes().get("attr2"));
+        
+        button = (UICommand) facesContext.getViewRoot().findComponent("mainForm:postback");
+        submit(button);
+        processLifecycleExecuteAndRender();
+
+        comp = facesContext.getViewRoot().findComponent("panel");
+        
+        Assert.assertEquals("value1", comp.getAttributes().get("attr1"));
+        Assert.assertEquals("value2", comp.getChildren().get(0).getAttributes().get("attr2"));
+        
+        tearDownRequest();
+    }
+    
+    @Test
+    public void testResourceDependency() throws Exception
+    {
+        setupRequest("/resourceDependency1.xhtml");
+        processLifecycleExecute();
+
+        executeBeforeRender(facesContext);
+        executeBuildViewCycle(facesContext);
+
+        UIPanel headPanel = (UIPanel) facesContext.getViewRoot().getFacet("head");
+        Assert.assertNotNull(headPanel);
+        Assert.assertEquals(1, headPanel.getChildCount());
+        
+        String nextUniqueId = facesContext.getViewRoot().createUniqueId(facesContext, null);
+        
+        executeViewHandlerRender(facesContext);
+        executeAfterRender(facesContext);
+        
+        UICommand button = (UICommand) facesContext.getViewRoot().findComponent("mainForm:postback");
+        submit(button);
+        
+        processLifecycleExecute();
+        
+        ResourceDependencyBean bean = facesContext.getApplication().evaluateExpressionGet(
+            facesContext, "#{resourceDependencyBean}", ResourceDependencyBean.class);
+        bean.setIncludeContent(true);
+        
+        executeBeforeRender(facesContext);
+        executeBuildViewCycle(facesContext);
+        
+        headPanel = (UIPanel) facesContext.getViewRoot().getFacet("head");
+        Assert.assertNotNull(headPanel);
+        Assert.assertEquals(1, headPanel.getChildCount());
+        Assert.assertNotSame(nextUniqueId, headPanel.getChildren().get(0).getId());
+        
+        executeViewHandlerRender(facesContext);
+        executeAfterRender(facesContext);
+    }
+
 }

Modified: myfaces/core/branches/2.1.x-client-window/impl/src/test/resources/org/apache/myfaces/view/facelets/pss/acid/WEB-INF/testcomponent.taglib.xml
URL: http://svn.apache.org/viewvc/myfaces/core/branches/2.1.x-client-window/impl/src/test/resources/org/apache/myfaces/view/facelets/pss/acid/WEB-INF/testcomponent.taglib.xml?rev=1420939&r1=1420938&r2=1420939&view=diff
==============================================================================
--- myfaces/core/branches/2.1.x-client-window/impl/src/test/resources/org/apache/myfaces/view/facelets/pss/acid/WEB-INF/testcomponent.taglib.xml (original)
+++ myfaces/core/branches/2.1.x-client-window/impl/src/test/resources/org/apache/myfaces/view/facelets/pss/acid/WEB-INF/testcomponent.taglib.xml Wed Dec 12 20:02:51 2012
@@ -64,5 +64,12 @@
 			<component-type>com.myapp.UISelfRenderComponent</component-type>
 		</component>
 	</tag>
+    
+    <tag>
+		<tag-name>rdcomponent</tag-name>
+		<component>
+			<component-type>com.myapp.UIRDComponent</component-type>
+		</component>
+	</tag>
 
 </facelet-taglib>
\ No newline at end of file

Propchange: myfaces/core/branches/2.1.x-client-window/impl/src/test/resources/org/apache/myfaces/view/facelets/pss/acid/resources/
------------------------------------------------------------------------------
    bugtraq:number = true

Modified: myfaces/core/branches/2.1.x-client-window/parent/pom.xml
URL: http://svn.apache.org/viewvc/myfaces/core/branches/2.1.x-client-window/parent/pom.xml?rev=1420939&r1=1420938&r2=1420939&view=diff
==============================================================================
--- myfaces/core/branches/2.1.x-client-window/parent/pom.xml (original)
+++ myfaces/core/branches/2.1.x-client-window/parent/pom.xml Wed Dec 12 20:02:51 2012
@@ -298,19 +298,10 @@
                 <version>${project.version}</version>
             </dependency>
 
-            <!-- myfaces-impl-ee6 (will be packed together with myfaces-impl by shade-plugin) -->
-            <dependency>
-                <groupId>org.apache.myfaces.core.internal</groupId>
-                <artifactId>myfaces-impl-ee6</artifactId>
-                <version>${project.version}</version>
-                <scope>compile</scope>
-                <optional>true</optional>
-            </dependency>
 
-            
             <!-- SPEC DEPENDENCIES -->
 
-            <!-- Servlet 2.5 -->
+            <!-- Servlet 2.5 (for ee5 compat compile) -->
             <dependency>
                 <groupId>org.apache.geronimo.specs</groupId>
                 <artifactId>geronimo-servlet_2.5_spec</artifactId>
@@ -318,7 +309,7 @@
                 <scope>provided</scope>
             </dependency>
 
-            <!-- Servlet 3.0 (for myfaces-impl-ee6) -->
+            <!-- Servlet 3.0 (for ee6) -->
             <dependency>
                 <groupId>org.apache.geronimo.specs</groupId>
                 <artifactId>geronimo-servlet_3.0_spec</artifactId>

Propchange: myfaces/core/branches/2.1.x-client-window/parent/pom.xml
------------------------------------------------------------------------------
  Merged /myfaces/core/trunk/parent/pom.xml:r1410540,1410553,1410652,1412781,1412831,1412932,1417719,1418586,1418589

Propchange: myfaces/core/branches/2.1.x-client-window/parent/src/
------------------------------------------------------------------------------
  Merged /myfaces/core/trunk/parent/src:r1410540,1410553,1410652,1412781,1412831,1412932,1417719,1418586,1418589

Propchange: myfaces/core/branches/2.1.x-client-window/shared/
------------------------------------------------------------------------------
  Merged /myfaces/core/trunk/shared:r1410540,1410553,1410652,1412781,1412831,1412932,1417719,1418586,1418589

Propchange: myfaces/core/branches/2.1.x-client-window/shared-public/pom.xml
------------------------------------------------------------------------------
  Merged /myfaces/core/trunk/shared-public/pom.xml:r1410540,1410553,1410652,1412781,1412831,1412932,1417719,1418586,1418589

Propchange: myfaces/core/branches/2.1.x-client-window/shared-public/src/
------------------------------------------------------------------------------
  Merged /myfaces/core/trunk/shared-public/src:r1410540,1410553,1410652,1412781,1412831,1412932,1417719,1418586,1418589

Propchange: myfaces/core/branches/2.1.x-client-window/shared-public/src/main/java/org/apache/myfaces/shared/util/AttachedDeltaWrapper.java
------------------------------------------------------------------------------
  Merged /myfaces/core/trunk/shared-public/src/main/java/org/apache/myfaces/shared/util/AttachedDeltaWrapper.java:r1410540,1410553,1410652,1412781,1412831,1412932,1417719,1418586,1418589

Propchange: myfaces/core/branches/2.1.x-client-window/shared-public/src/main/java/org/apache/myfaces/shared/util/ComponentUtils.java
------------------------------------------------------------------------------
  Merged /myfaces/core/trunk/shared-public/src/main/java/org/apache/myfaces/shared/util/ComponentUtils.java:r1410540,1410553,1410652,1412781,1412831,1412932,1417719,1418586,1418589

Propchange: myfaces/core/branches/2.1.x-client-window/shared-public/src/main/java/org/apache/myfaces/shared/util/DebugUtils.java
------------------------------------------------------------------------------
  Merged /myfaces/core/trunk/shared-public/src/main/java/org/apache/myfaces/shared/util/DebugUtils.java:r1410540,1410553,1410652,1412781,1412831,1412932,1417719,1418586,1418589

Propchange: myfaces/core/branches/2.1.x-client-window/shared-public/src/main/java/org/apache/myfaces/shared/util/RendererUtils.java
------------------------------------------------------------------------------
  Merged /myfaces/core/trunk/shared-public/src/main/java/org/apache/myfaces/shared/util/RendererUtils.java:r1410540,1410553,1410652,1412781,1412831,1412932,1417719,1418586,1418589

Propchange: myfaces/core/branches/2.1.x-client-window/shared-public/src/main/java/org/apache/myfaces/shared/util/TagUtils.java
------------------------------------------------------------------------------
  Merged /myfaces/core/trunk/shared-public/src/main/java/org/apache/myfaces/shared/util/TagUtils.java:r1410540,1410553,1410652,1412781,1412831,1412932,1417719,1418586,1418589

Propchange: myfaces/core/branches/2.1.x-client-window/shared-public/src/main/java/org/apache/myfaces/shared/util/renderkit/
------------------------------------------------------------------------------
  Merged /myfaces/core/trunk/shared-public/src/main/java/org/apache/myfaces/shared/util/renderkit:r1410540,1410553,1410652,1412781,1412831,1412932,1417719,1418586,1418589