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><h:panelGroup id="panel" binding="#{componentBindingBean.panel}"></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