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/09/01 23:55:25 UTC

svn commit: r1379867 - /myfaces/tomahawk/trunk/core20/src/main/java/org/apache/myfaces/tomahawk/application/ResourceViewHandlerWrapper.java

Author: lu4242
Date: Sat Sep  1 21:55:25 2012
New Revision: 1379867

URL: http://svn.apache.org/viewvc?rev=1379867&view=rev
Log:
TOMAHAWK-1634 Zero state for autoscroll script and hidden field 

Modified:
    myfaces/tomahawk/trunk/core20/src/main/java/org/apache/myfaces/tomahawk/application/ResourceViewHandlerWrapper.java

Modified: myfaces/tomahawk/trunk/core20/src/main/java/org/apache/myfaces/tomahawk/application/ResourceViewHandlerWrapper.java
URL: http://svn.apache.org/viewvc/myfaces/tomahawk/trunk/core20/src/main/java/org/apache/myfaces/tomahawk/application/ResourceViewHandlerWrapper.java?rev=1379867&r1=1379866&r2=1379867&view=diff
==============================================================================
--- myfaces/tomahawk/trunk/core20/src/main/java/org/apache/myfaces/tomahawk/application/ResourceViewHandlerWrapper.java (original)
+++ myfaces/tomahawk/trunk/core20/src/main/java/org/apache/myfaces/tomahawk/application/ResourceViewHandlerWrapper.java Sat Sep  1 21:55:25 2012
@@ -25,8 +25,12 @@ import javax.faces.FacesException;
 import javax.faces.application.ViewHandler;
 import javax.faces.application.ViewHandlerWrapper;
 import javax.faces.component.UIComponent;
+import javax.faces.component.UIOutput;
 import javax.faces.component.UIViewRoot;
 import javax.faces.context.FacesContext;
+import javax.faces.event.PostAddToViewEvent;
+import javax.faces.event.SystemEvent;
+import javax.faces.event.SystemEventListener;
 
 import org.apache.myfaces.custom.autoscroll.AutoscrollBehaviorTagHandler;
 import org.apache.myfaces.custom.autoscroll.AutoscrollBodyScript;
@@ -39,6 +43,13 @@ import org.apache.myfaces.tomahawk.util.
 
 public class ResourceViewHandlerWrapper extends ViewHandlerWrapper
 {
+    private static final String SET_RESOURCE_CONTAINER_DUMMY_COMPONENT_ID = 
+            "oam_autoscroll_setResourceContainer";
+    private static final String BODY_SCRIPT_COMPONENT_ID =
+            "oam_autoscroll_body_script";
+    private static final String HIDDEN_FIELD_COMPONENT_ID =
+            "oam_autoscroll_hidden_field";
+    
     private ViewHandler _delegate;
 
     public ResourceViewHandlerWrapper(ViewHandler delegate)
@@ -54,6 +65,69 @@ public class ResourceViewHandlerWrapper 
     }
 
     @Override
+    public UIViewRoot createView(FacesContext context, String viewId)
+    {
+        UIViewRoot root = super.createView(context, viewId);
+        // This listener just ensures that the locations for autoscroll component are
+        // set before call markInitialState(). In this way, the state size is reduced when
+        // partial state saving is used.
+        root.subscribeToViewEvent(PostAddToViewEvent.class, new SystemEventListener() {
+
+            public boolean isListenerForSource(Object o)
+            {
+                return o instanceof UIViewRoot;
+            }
+
+            public void processEvent(SystemEvent se)
+            {
+                FacesContext context = FacesContext.getCurrentInstance();
+                UIViewRoot viewToRender = (UIViewRoot) se.getSource();
+                if (MyfacesConfig.getCurrentInstance(context.getExternalContext()).isAutoScroll() ||
+                    viewToRender.getAttributes().containsKey(AutoscrollBehaviorTagHandler.AUTOSCROLL_TAG_ON_PAGE))
+                {
+                    UIOutput test = new UIOutput();
+                    test.setId(SET_RESOURCE_CONTAINER_DUMMY_COMPONENT_ID);
+                    test.setTransient(true);
+                    UIComponent facet = null;
+                    facet = viewToRender.getFacet(TomahawkResourceUtils.FORM_LOCATION);
+                    if (facet == null)
+                    {
+                        viewToRender.addComponentResource(context, test, TomahawkResourceUtils.FORM_LOCATION);
+                        facet = viewToRender.getFacet(TomahawkResourceUtils.FORM_LOCATION);
+                        if (facet != null)
+                        {
+                            facet.getChildren().remove(test);
+                        }
+                    }
+                    
+                    facet = viewToRender.getFacet(TomahawkResourceUtils.BODY_LOCATION);
+                    if (facet == null)
+                    {
+                        viewToRender.addComponentResource(context, test, TomahawkResourceUtils.BODY_LOCATION);
+                        facet = viewToRender.getFacet(TomahawkResourceUtils.BODY_LOCATION);
+                        if (facet != null)
+                        {
+                            facet.getChildren().remove(test);
+                        }
+                    }
+
+                    facet = viewToRender.getFacet(TomahawkResourceUtils.HEAD_LOCATION);
+                    if (facet == null)
+                    {
+                        viewToRender.addComponentResource(context, test, TomahawkResourceUtils.HEAD_LOCATION);
+                        facet = viewToRender.getFacet(TomahawkResourceUtils.HEAD_LOCATION);
+                        if (facet != null)
+                        {
+                            facet.getChildren().remove(test);
+                        }
+                    }
+                }
+            }
+        });
+        return root;
+    }
+
+    @Override
     public void renderView(FacesContext context, UIViewRoot viewToRender)
             throws IOException, FacesException
     {
@@ -70,6 +144,7 @@ public class ResourceViewHandlerWrapper 
                     context.getApplication().createComponent(context, 
                         AutoscrollBodyScript.COMPONENT_TYPE,
                         AutoscrollBodyScript.DEFAULT_RENDERER_TYPE);
+                autoscrollBodyScript.setId(BODY_SCRIPT_COMPONENT_ID);
                 autoscrollBodyScript.setTransient(true);
                 autoscrollBodyScript.getAttributes().put(
                         JSFAttr.TARGET_ATTR, 
@@ -81,6 +156,7 @@ public class ResourceViewHandlerWrapper 
                 createComponent(context, 
                         AutoscrollHiddenField.COMPONENT_TYPE,
                         AutoscrollHiddenField.DEFAULT_RENDERER_TYPE);
+            autoscrollHiddenField.setId(HIDDEN_FIELD_COMPONENT_ID);
             autoscrollHiddenField.setTransient(true);
             autoscrollHiddenField.getAttributes().put(JSFAttr.TARGET_ATTR, TomahawkResourceUtils.FORM_LOCATION);
             viewToRender.addComponentResource(context, autoscrollHiddenField);