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 2016/04/06 04:34:51 UTC

svn commit: r1737907 - in /myfaces/core/trunk/impl/src: main/java/org/apache/myfaces/view/facelets/ main/java/org/apache/myfaces/view/facelets/el/ test/java/org/apache/myfaces/view/facelets/pss/acid/ test/java/org/apache/myfaces/view/facelets/pss/acid/...

Author: lu4242
Date: Wed Apr  6 02:34:51 2016
New Revision: 1737907

URL: http://svn.apache.org/viewvc?rev=1737907&view=rev
Log:
MYFACES-4041 EL evaluation fails when state is saved because FaceletState object is not present

Added:
    myfaces/core/trunk/impl/src/test/java/org/apache/myfaces/view/facelets/pss/acid/AcidARCacheELMyFacesRequestTestCase.java
      - copied, changed from r1737696, myfaces/core/trunk/impl/src/test/java/org/apache/myfaces/view/facelets/pss/acid/AcidNoPssMyFacesRequestTestCase.java
    myfaces/core/trunk/impl/src/test/java/org/apache/myfaces/view/facelets/pss/acid/component/UISimpleComponent2.java
      - copied, changed from r1737696, myfaces/core/trunk/impl/src/test/java/org/apache/myfaces/view/facelets/pss/acid/component/UISimpleComponent1.java
    myfaces/core/trunk/impl/src/test/resources/org/apache/myfaces/view/facelets/pss/acid/simpleComponent2.xhtml
      - copied, changed from r1737696, myfaces/core/trunk/impl/src/test/resources/org/apache/myfaces/view/facelets/pss/acid/simpleComponent1.xhtml
    myfaces/core/trunk/impl/src/test/resources/org/apache/myfaces/view/facelets/pss/acid/simpleComponent2_1.xhtml
      - copied, changed from r1737696, myfaces/core/trunk/impl/src/test/resources/org/apache/myfaces/view/facelets/pss/acid/simpleComponent1.xhtml
Modified:
    myfaces/core/trunk/impl/src/main/java/org/apache/myfaces/view/facelets/DefaultFaceletsStateManagementStrategy.java
    myfaces/core/trunk/impl/src/main/java/org/apache/myfaces/view/facelets/el/FaceletStateValueExpression.java
    myfaces/core/trunk/impl/src/test/java/org/apache/myfaces/view/facelets/pss/acid/AcidMyFacesRequestTestCase.java

Modified: myfaces/core/trunk/impl/src/main/java/org/apache/myfaces/view/facelets/DefaultFaceletsStateManagementStrategy.java
URL: http://svn.apache.org/viewvc/myfaces/core/trunk/impl/src/main/java/org/apache/myfaces/view/facelets/DefaultFaceletsStateManagementStrategy.java?rev=1737907&r1=1737906&r2=1737907&view=diff
==============================================================================
--- myfaces/core/trunk/impl/src/main/java/org/apache/myfaces/view/facelets/DefaultFaceletsStateManagementStrategy.java (original)
+++ myfaces/core/trunk/impl/src/main/java/org/apache/myfaces/view/facelets/DefaultFaceletsStateManagementStrategy.java Wed Apr  6 02:34:51 2016
@@ -765,6 +765,8 @@ public class DefaultFaceletsStateManagem
                             UIComponentBase.saveAttachedState(context, faceletViewState));
                     //Do not save on UIViewRoot
                     view.getAttributes().remove(ComponentSupport.FACELET_STATE_INSTANCE);
+                    view.getTransientStateHelper().putTransient(
+                            ComponentSupport.FACELET_STATE_INSTANCE, faceletViewState);
                 }
                 if (_viewPoolProcessor != null && 
                     _viewPoolProcessor.isViewPoolEnabledForThisView(context, view))

Modified: myfaces/core/trunk/impl/src/main/java/org/apache/myfaces/view/facelets/el/FaceletStateValueExpression.java
URL: http://svn.apache.org/viewvc/myfaces/core/trunk/impl/src/main/java/org/apache/myfaces/view/facelets/el/FaceletStateValueExpression.java?rev=1737907&r1=1737906&r2=1737907&view=diff
==============================================================================
--- myfaces/core/trunk/impl/src/main/java/org/apache/myfaces/view/facelets/el/FaceletStateValueExpression.java (original)
+++ myfaces/core/trunk/impl/src/main/java/org/apache/myfaces/view/facelets/el/FaceletStateValueExpression.java Wed Apr  6 02:34:51 2016
@@ -59,6 +59,11 @@ public class FaceletStateValueExpression
         UIViewRoot root = facesContext.getViewRoot();
         FaceletState map = (FaceletState) root.getAttributes().get(
             ComponentSupport.FACELET_STATE_INSTANCE);
+        if (map == null)
+        {
+            map = (FaceletState)root.getTransientStateHelper().getTransient(
+                    ComponentSupport.FACELET_STATE_INSTANCE);
+        }
         return map.getBinding(uniqueId, key);
     }
     
@@ -72,6 +77,11 @@ public class FaceletStateValueExpression
         UIViewRoot root = facesContext.getViewRoot();
         FaceletState map = (FaceletState) root.getAttributes().get(
             ComponentSupport.FACELET_STATE_INSTANCE);
+        if (map == null)
+        {
+            map = (FaceletState)root.getTransientStateHelper().getTransient(
+                    ComponentSupport.FACELET_STATE_INSTANCE);
+        }
         return map.getBinding(uniqueId, key);
     }
 

Copied: myfaces/core/trunk/impl/src/test/java/org/apache/myfaces/view/facelets/pss/acid/AcidARCacheELMyFacesRequestTestCase.java (from r1737696, myfaces/core/trunk/impl/src/test/java/org/apache/myfaces/view/facelets/pss/acid/AcidNoPssMyFacesRequestTestCase.java)
URL: http://svn.apache.org/viewvc/myfaces/core/trunk/impl/src/test/java/org/apache/myfaces/view/facelets/pss/acid/AcidARCacheELMyFacesRequestTestCase.java?p2=myfaces/core/trunk/impl/src/test/java/org/apache/myfaces/view/facelets/pss/acid/AcidARCacheELMyFacesRequestTestCase.java&p1=myfaces/core/trunk/impl/src/test/java/org/apache/myfaces/view/facelets/pss/acid/AcidNoPssMyFacesRequestTestCase.java&r1=1737696&r2=1737907&rev=1737907&view=diff
==============================================================================
--- myfaces/core/trunk/impl/src/test/java/org/apache/myfaces/view/facelets/pss/acid/AcidNoPssMyFacesRequestTestCase.java (original)
+++ myfaces/core/trunk/impl/src/test/java/org/apache/myfaces/view/facelets/pss/acid/AcidARCacheELMyFacesRequestTestCase.java Wed Apr  6 02:34:51 2016
@@ -19,15 +19,17 @@
 package org.apache.myfaces.view.facelets.pss.acid;
 
 import javax.faces.application.StateManager;
+import org.apache.myfaces.view.facelets.impl.FaceletCompositionContextImpl;
 
-public class AcidNoPssMyFacesRequestTestCase extends AcidMyFacesRequestTestCase
+public class AcidARCacheELMyFacesRequestTestCase extends AcidMyFacesRequestTestCase
 {
 
     @Override
     protected void setUpWebConfigParams() throws Exception
     {
         super.setUpWebConfigParams();
-        servletContext.addInitParameter(StateManager.PARTIAL_STATE_SAVING_PARAM_NAME, "false");
+        servletContext.addInitParameter(FaceletCompositionContextImpl.INIT_PARAM_CACHE_EL_EXPRESSIONS, 
+                "alwaysRecompile");
     }
     
 }

Modified: myfaces/core/trunk/impl/src/test/java/org/apache/myfaces/view/facelets/pss/acid/AcidMyFacesRequestTestCase.java
URL: http://svn.apache.org/viewvc/myfaces/core/trunk/impl/src/test/java/org/apache/myfaces/view/facelets/pss/acid/AcidMyFacesRequestTestCase.java?rev=1737907&r1=1737906&r2=1737907&view=diff
==============================================================================
--- myfaces/core/trunk/impl/src/test/java/org/apache/myfaces/view/facelets/pss/acid/AcidMyFacesRequestTestCase.java (original)
+++ myfaces/core/trunk/impl/src/test/java/org/apache/myfaces/view/facelets/pss/acid/AcidMyFacesRequestTestCase.java Wed Apr  6 02:34:51 2016
@@ -34,6 +34,7 @@ import org.apache.myfaces.mc.test.core.A
 import org.apache.myfaces.shared.config.MyfacesConfig;
 import org.apache.myfaces.test.mock.MockPrintWriter;
 import org.apache.myfaces.view.facelets.pss.acid.component.UISimpleComponent1;
+import org.apache.myfaces.view.facelets.pss.acid.component.UISimpleComponent2;
 import org.apache.myfaces.view.facelets.pss.acid.managed.CheckActionEventBean;
 import org.apache.myfaces.view.facelets.pss.acid.managed.ComponentBindingBean;
 import org.apache.myfaces.view.facelets.pss.acid.managed.ComponentBindingFormBean;
@@ -2139,6 +2140,29 @@ public class AcidMyFacesRequestTestCase
 
         endRequest();
     }
+    
+    @Test
+    public void testSimpleComponent2() throws Exception
+    {
+        startViewRequest("/simpleComponent2.xhtml");
+        processLifecycleExecuteAndRender();
+        
+        UIComponent comp = facesContext.getViewRoot().findComponent("mainForm:component");
+        Assert.assertNotNull(comp);
+        Assert.assertTrue(comp instanceof UISimpleComponent2);
+        //Assert.assertEquals(1, comp.getChildCount());
+        //Assert.assertEquals("Dynamically added child", comp.getChildren().get(0).getAttributes().get("value"));
+        
+        UICommand button = (UICommand) facesContext.getViewRoot().findComponent("mainForm:postback");
+        client.submit(button);
+        processLifecycleExecuteAndRender();
+        
+        comp = facesContext.getViewRoot().findComponent("mainForm:component");
+        Assert.assertNotNull(comp);
+        Assert.assertTrue(comp instanceof UISimpleComponent2);
+
+        endRequest();
+    }
     
     @Test
     public void testUIRepeatCC1() throws Exception

Copied: myfaces/core/trunk/impl/src/test/java/org/apache/myfaces/view/facelets/pss/acid/component/UISimpleComponent2.java (from r1737696, myfaces/core/trunk/impl/src/test/java/org/apache/myfaces/view/facelets/pss/acid/component/UISimpleComponent1.java)
URL: http://svn.apache.org/viewvc/myfaces/core/trunk/impl/src/test/java/org/apache/myfaces/view/facelets/pss/acid/component/UISimpleComponent2.java?p2=myfaces/core/trunk/impl/src/test/java/org/apache/myfaces/view/facelets/pss/acid/component/UISimpleComponent2.java&p1=myfaces/core/trunk/impl/src/test/java/org/apache/myfaces/view/facelets/pss/acid/component/UISimpleComponent1.java&r1=1737696&r2=1737907&rev=1737907&view=diff
==============================================================================
--- myfaces/core/trunk/impl/src/test/java/org/apache/myfaces/view/facelets/pss/acid/component/UISimpleComponent1.java (original)
+++ myfaces/core/trunk/impl/src/test/java/org/apache/myfaces/view/facelets/pss/acid/component/UISimpleComponent2.java Wed Apr  6 02:34:51 2016
@@ -19,7 +19,8 @@
 package org.apache.myfaces.view.facelets.pss.acid.component;
 
 import javax.faces.component.FacesComponent;
-import javax.faces.component.UIPanel;
+import javax.faces.component.UIInput;
+import javax.faces.context.FacesContext;
 import javax.faces.event.AbortProcessingException;
 import javax.faces.event.ComponentSystemEvent;
 import javax.faces.event.ListenerFor;
@@ -31,12 +32,12 @@ import javax.faces.event.PostRestoreStat
  */
 @ListenerFor(systemEventClass = PostRestoreStateEvent.class)
 @FacesComponent(namespace = "http://my.namespace.com/components",
-        createTag = true, tagName = "simpleComponent1",
-        value = "com.myapp.UISimpleComponent1")
-public class UISimpleComponent1 extends UIPanel
+        createTag = true, tagName = "simpleComponent2",
+        value = "com.myapp.UISimpleComponent2")
+public class UISimpleComponent2 extends UIInput
 {
 
-    public UISimpleComponent1()
+    public UISimpleComponent2()
     {
         setRendererType(null);
     }
@@ -55,4 +56,13 @@ public class UISimpleComponent1 extends
         super.processEvent(event);
     }
 
+    @Override
+    public Object saveState(FacesContext context)
+    {
+        String value = (String) this.getValue();
+        
+        return super.saveState(context); 
+    }
+
+    
 }

Copied: myfaces/core/trunk/impl/src/test/resources/org/apache/myfaces/view/facelets/pss/acid/simpleComponent2.xhtml (from r1737696, myfaces/core/trunk/impl/src/test/resources/org/apache/myfaces/view/facelets/pss/acid/simpleComponent1.xhtml)
URL: http://svn.apache.org/viewvc/myfaces/core/trunk/impl/src/test/resources/org/apache/myfaces/view/facelets/pss/acid/simpleComponent2.xhtml?p2=myfaces/core/trunk/impl/src/test/resources/org/apache/myfaces/view/facelets/pss/acid/simpleComponent2.xhtml&p1=myfaces/core/trunk/impl/src/test/resources/org/apache/myfaces/view/facelets/pss/acid/simpleComponent1.xhtml&r1=1737696&r2=1737907&rev=1737907&view=diff
==============================================================================
--- myfaces/core/trunk/impl/src/test/resources/org/apache/myfaces/view/facelets/pss/acid/simpleComponent1.xhtml (original)
+++ myfaces/core/trunk/impl/src/test/resources/org/apache/myfaces/view/facelets/pss/acid/simpleComponent2.xhtml Wed Apr  6 02:34:51 2016
@@ -31,7 +31,10 @@
 		
 	<h:form id="mainForm">
 	
-                <test1:simpleComponent1 id="component"/>
+            
+                <ui:include src="simpleComponent2_1.xhtml">
+                    <ui:param name="passedValue" value ="#{testManagedBean.page}"/>
+                </ui:include>
 		
 		<br/>
 		

Copied: myfaces/core/trunk/impl/src/test/resources/org/apache/myfaces/view/facelets/pss/acid/simpleComponent2_1.xhtml (from r1737696, myfaces/core/trunk/impl/src/test/resources/org/apache/myfaces/view/facelets/pss/acid/simpleComponent1.xhtml)
URL: http://svn.apache.org/viewvc/myfaces/core/trunk/impl/src/test/resources/org/apache/myfaces/view/facelets/pss/acid/simpleComponent2_1.xhtml?p2=myfaces/core/trunk/impl/src/test/resources/org/apache/myfaces/view/facelets/pss/acid/simpleComponent2_1.xhtml&p1=myfaces/core/trunk/impl/src/test/resources/org/apache/myfaces/view/facelets/pss/acid/simpleComponent1.xhtml&r1=1737696&r2=1737907&rev=1737907&view=diff
==============================================================================
--- myfaces/core/trunk/impl/src/test/resources/org/apache/myfaces/view/facelets/pss/acid/simpleComponent1.xhtml (original)
+++ myfaces/core/trunk/impl/src/test/resources/org/apache/myfaces/view/facelets/pss/acid/simpleComponent2_1.xhtml Wed Apr  6 02:34:51 2016
@@ -17,27 +17,9 @@
 				xmlns:f="http://java.sun.com/jsf/core"
 				xmlns:ui="http://java.sun.com/jsf/facelets"
 				xmlns:test="http://testcomponent"
-                                xmlns:test1="http://my.namespace.com/components"
-				template="common.xhtml">
+                                xmlns:test1="http://my.namespace.com/components">
 
-	<h2>Add Test Instructions</h2>
-	
-	<ol>
-		<li>The component should have dynamically modified the tree so that 'Dynamically added child' appears inside the red box</li>
-		<li>Click 'POSTback'. The 'Dynamically added child' should not disappear (because it should have been serialized in the ViewState)</li>
-	</ol>
-		
-	<h:messages/>
-		
-	<h:form id="mainForm">
-	
-                <test1:simpleComponent1 id="component"/>
-		
-		<br/>
-		
-		<h:commandButton id="postback" value="POSTback" action="#{testManagedBean.save}"/>
-		
-	</h:form>			
+    <test1:simpleComponent2 id="component" value="#{passedValue}"/>
 	
 </ui:composition>