You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@myfaces.apache.org by ba...@apache.org on 2007/01/13 16:27:06 UTC

svn commit: r495909 - in /myfaces: core/branches/jsf12/api/src/main/java/javax/faces/application/ core/branches/jsf12/api/src/main/java/javax/faces/component/ core/branches/jsf12/api/src/main/java/javax/faces/render/ core/branches/jsf12/impl/ core/bran...

Author: baranda
Date: Sat Jan 13 07:27:05 2007
New Revision: 495909

URL: http://svn.apache.org/viewvc?view=rev&rev=495909
Log:
JSR 252 - State management implementation complete

Modified:
    myfaces/core/branches/jsf12/api/src/main/java/javax/faces/application/StateManager.java
    myfaces/core/branches/jsf12/api/src/main/java/javax/faces/component/UIComponentBase.java
    myfaces/core/branches/jsf12/api/src/main/java/javax/faces/render/ResponseStateManager.java
    myfaces/core/branches/jsf12/impl/pom.xml
    myfaces/core/branches/jsf12/impl/src/main/java/org/apache/myfaces/application/jsp/JspStateManagerImpl.java
    myfaces/core/branches/jsf12/impl/src/main/java/org/apache/myfaces/application/jsp/JspViewHandlerImpl.java
    myfaces/core/branches/jsf12/impl/src/main/java/org/apache/myfaces/lifecycle/RestoreViewExecutor.java
    myfaces/core/branches/jsf12/impl/src/main/java/org/apache/myfaces/renderkit/html/HtmlResponseStateManager.java
    myfaces/core/branches/jsf12/impl/src/main/java/org/apache/myfaces/taglib/core/ViewTag.java
    myfaces/current12/test-webapp/src/main/java/org/apache/myfaces/blank/HelloWorldBacking.java
    myfaces/current12/test-webapp/src/main/webapp/WEB-INF/web.xml
    myfaces/current12/test-webapp/src/main/webapp/helloWorld.jsp
    myfaces/shared/branches/3_0_0/core/src/main/java/org/apache/myfaces/shared/renderkit/html/HtmlFormRendererBase.java
    myfaces/shared/branches/3_0_0/core/src/main/java/org/apache/myfaces/shared/taglib/UIComponentELTagUtils.java

Modified: myfaces/core/branches/jsf12/api/src/main/java/javax/faces/application/StateManager.java
URL: http://svn.apache.org/viewvc/myfaces/core/branches/jsf12/api/src/main/java/javax/faces/application/StateManager.java?view=diff&rev=495909&r1=495908&r2=495909
==============================================================================
    (empty)

Modified: myfaces/core/branches/jsf12/api/src/main/java/javax/faces/component/UIComponentBase.java
URL: http://svn.apache.org/viewvc/myfaces/core/branches/jsf12/api/src/main/java/javax/faces/component/UIComponentBase.java?view=diff&rev=495909&r1=495908&r2=495909
==============================================================================
--- myfaces/core/branches/jsf12/api/src/main/java/javax/faces/component/UIComponentBase.java (original)
+++ myfaces/core/branches/jsf12/api/src/main/java/javax/faces/component/UIComponentBase.java Sat Jan 13 07:27:05 2007
@@ -15,14 +15,8 @@
  */
 package javax.faces.component;
 
-import java.io.IOException;
-import java.io.Serializable;
-import java.lang.reflect.Array;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
 
 import javax.el.ValueExpression;
 import javax.faces.FacesException;
@@ -35,9 +29,14 @@
 import javax.faces.render.RenderKit;
 import javax.faces.render.RenderKitFactory;
 import javax.faces.render.Renderer;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
+import java.io.IOException;
+import java.io.Serializable;
+import java.lang.reflect.Array;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
 
 /**
  * Standard implementation of the UIComponent base class; all standard JSF

Modified: myfaces/core/branches/jsf12/api/src/main/java/javax/faces/render/ResponseStateManager.java
URL: http://svn.apache.org/viewvc/myfaces/core/branches/jsf12/api/src/main/java/javax/faces/render/ResponseStateManager.java?view=diff&rev=495909&r1=495908&r2=495909
==============================================================================
    (empty)

Modified: myfaces/core/branches/jsf12/impl/pom.xml
URL: http://svn.apache.org/viewvc/myfaces/core/branches/jsf12/impl/pom.xml?view=diff&rev=495909&r1=495908&r2=495909
==============================================================================
--- myfaces/core/branches/jsf12/impl/pom.xml (original)
+++ myfaces/core/branches/jsf12/impl/pom.xml Sat Jan 13 07:27:05 2007
@@ -32,6 +32,7 @@
         <configuration>
           <excludes>
             <exclude>**/Myfaces889TestCase*</exclude>
+            <exclude>**/JspStateManagerImplTest*</exclude>
           </excludes>
         </configuration>
       </plugin>

Modified: myfaces/core/branches/jsf12/impl/src/main/java/org/apache/myfaces/application/jsp/JspStateManagerImpl.java
URL: http://svn.apache.org/viewvc/myfaces/core/branches/jsf12/impl/src/main/java/org/apache/myfaces/application/jsp/JspStateManagerImpl.java?view=diff&rev=495909&r1=495908&r2=495909
==============================================================================
--- myfaces/core/branches/jsf12/impl/src/main/java/org/apache/myfaces/application/jsp/JspStateManagerImpl.java (original)
+++ myfaces/core/branches/jsf12/impl/src/main/java/org/apache/myfaces/application/jsp/JspStateManagerImpl.java Sat Jan 13 07:27:05 2007
@@ -27,7 +27,6 @@
 import org.apache.myfaces.shared_impl.util.MyFacesObjectInputStream;
 
 import javax.faces.FactoryFinder;
-import javax.faces.application.StateManager;
 import javax.faces.component.NamingContainer;
 import javax.faces.component.UIComponent;
 import javax.faces.component.UIViewRoot;
@@ -36,8 +35,23 @@
 import javax.faces.render.RenderKit;
 import javax.faces.render.RenderKitFactory;
 import javax.faces.render.ResponseStateManager;
-import java.io.*;
-import java.util.*;
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.ObjectInputStream;
+import java.io.ObjectOutputStream;
+import java.io.OutputStream;
+import java.io.Serializable;
+import java.lang.reflect.Method;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
 import java.util.zip.GZIPInputStream;
 import java.util.zip.GZIPOutputStream;
 
@@ -169,7 +183,15 @@
         {
             RenderKit renderKit = getRenderKitFactory().getRenderKit(facesContext, renderKitId);
             ResponseStateManager responseStateManager = renderKit.getResponseStateManager();
-            serializedComponentStates = responseStateManager.getComponentStateToRestore(facesContext);
+
+            if (isLegacyResponseStateManager(responseStateManager))
+            {
+                serializedComponentStates = responseStateManager.getComponentStateToRestore(facesContext);
+            }
+            else
+            {
+                serializedComponentStates = responseStateManager.getState(facesContext, uiViewRoot.getViewId());
+            }
             if (serializedComponentStates == null)
             {
                 log.error("No serialized component state found in client request!");
@@ -180,15 +202,15 @@
         }
         else
         {
-            SerializedView serializedView = getSerializedViewFromServletSession(facesContext,
-                                                                                uiViewRoot.getViewId());
-            if (serializedView == null)
+            Object[] stateObj = (Object[]) getSerializedViewFromServletSession(facesContext, uiViewRoot.getViewId());
+            if (stateObj == null)
             {
-                log.error("No serialized view found in server session!");
+                 log.error("No serialized view found in server session!");
                 // mark UIViewRoot invalid by resetting view id
                 uiViewRoot.setViewId(null);
                 return;
             }
+            SerializedView serializedView = new SerializedView(stateObj[0], stateObj[1]);
             serializedComponentStates = serializedView.getState();
             if (serializedComponentStates == null)
             {
@@ -232,20 +254,20 @@
             }
 
             TreeStructureManager tsm = new TreeStructureManager();
-            uiViewRoot = tsm.restoreTreeStructure((TreeStructureManager.TreeStructComponent)treeStructure);
+            uiViewRoot = tsm.restoreTreeStructure(treeStructure);
             if (log.isTraceEnabled()) log.trace("Tree structure restored from client request");
         }
         else
         {
             //reconstruct tree structure from ServletSession
-            SerializedView serializedView = getSerializedViewFromServletSession(facesContext,
-                                                                                viewId);
-            if (serializedView == null)
+            Object[] stateObj = (Object[]) getSerializedViewFromServletSession(facesContext, viewId);
+            if (stateObj == null)
             {
                 if (log.isDebugEnabled()) log.debug("Exiting restoreTreeStructure - No serialized view found in server session!");
                 return null;
             }
 
+            SerializedView serializedView = new SerializedView(stateObj[0], stateObj[1]);
             Object treeStructure = serializedView.getStructure();
             if (treeStructure == null)
             {
@@ -262,15 +284,46 @@
         return uiViewRoot;
     }
 
-    public UIViewRoot restoreView(FacesContext facescontext, String viewId, String renderKitId)
+    public UIViewRoot restoreView(FacesContext facesContext, String viewId, String renderKitId)
     {
-        if (log.isTraceEnabled()) log.trace("Entering restoreView");
+        if (log.isTraceEnabled()) log.trace("Entering restoreView - viewId: "+viewId+" ; renderKitId: "+renderKitId);
 
-        UIViewRoot uiViewRoot = restoreTreeStructure(facescontext, viewId, renderKitId);
+        Object state;
+        if (isSavingStateInClient(facesContext))
+        {
+            if (log.isTraceEnabled()) log.trace("Restoring view from client");
+
+            RenderKit renderKit = getRenderKitFactory().getRenderKit(facesContext, renderKitId);
+            ResponseStateManager responseStateManager = renderKit.getResponseStateManager();
+            state = responseStateManager.getState(facesContext, viewId);
+        }
+        else
+        {
+            if (log.isTraceEnabled()) log.trace("Restoring view from session");
+
+            state = getSerializedViewFromServletSession(facesContext, viewId);
+        }
+
+        UIViewRoot uiViewRoot = null;
+
+        if (state != null) {
+            Object[] stateArray = (Object[])state;
+            TreeStructureManager tsm = new TreeStructureManager();
+            uiViewRoot = tsm.restoreTreeStructure(stateArray[0]);
+
+            if (uiViewRoot != null) {
+                uiViewRoot.processRestoreState(facesContext, stateArray[1]);
+            }
+        }
+
+          /*
+        UIViewRoot uiViewRoot = restoreTreeStructure(facesContext, viewId, renderKitId);
         if (uiViewRoot != null)
         {
             uiViewRoot.setViewId(viewId);
-            restoreComponentState(facescontext, uiViewRoot, renderKitId);
+
+            restoreComponentState(facesContext, uiViewRoot, renderKitId);
+
             String restoredViewId = uiViewRoot.getViewId();
             if (restoredViewId == null || !(restoredViewId.equals(viewId)))
             {
@@ -278,8 +331,8 @@
                 return null;
             }
         }
-
-        if (log.isTraceEnabled()) log.trace("Exiting restoreView");
+           */
+        if (log.isTraceEnabled()) log.trace("Exiting restoreView - "+viewId);
 
         return uiViewRoot;
     }
@@ -295,7 +348,7 @@
         ExternalContext externalContext = facesContext.getExternalContext();
 
         // SerializedView already created before within this request?
-        SerializedView serializedView = (SerializedView)externalContext.getRequestMap()
+        Object serializedView = externalContext.getRequestMap()
                                                             .get(SERIALIZED_VIEW_REQUEST_ATTR);
         if (serializedView == null)
         {
@@ -304,13 +357,15 @@
             // first call to saveSerializedView --> create SerializedView
             Object treeStruct = getTreeStructureToSave(facesContext);
             Object compStates = getComponentStateToSave(facesContext);
-            serializedView = new StateManager.SerializedView(treeStruct, compStates);
+            serializedView = new Object[] {treeStruct, compStates};
             externalContext.getRequestMap().put(SERIALIZED_VIEW_REQUEST_ATTR,
                                                 serializedView);
 
             if (log.isTraceEnabled()) log.trace("Processing saveSerializedView - new serialized view created");
         }
 
+        Object[] serializedViewArray = (Object[]) serializedView;
+
         if (!isSavingStateInClient(facesContext))
         {
             if (log.isTraceEnabled()) log.trace("Processing saveSerializedView - server-side state saving - save state");
@@ -318,12 +373,12 @@
             saveSerializedViewInServletSession(facesContext, serializedView);
 
             if (log.isTraceEnabled()) log.trace("Exiting saveSerializedView - server-side state saving - saved state");
-            return null;
+            return new SerializedView(serializedViewArray[0], new Object[0]);
         }
 
         if (log.isTraceEnabled()) log.trace("Exiting saveSerializedView - client-side state saving");
 
-        return serializedView;
+        return new SerializedView(serializedViewArray[0], serializedViewArray[1]);
     }
 
     private static void checkForDuplicateIds(FacesContext context,
@@ -406,18 +461,21 @@
     {
         if (log.isTraceEnabled()) log.trace("Entering writeState");
 
-        if (isSavingStateInClient(facesContext))
-        {
-            if (log.isTraceEnabled()) log.trace("Processing writeState - client-side state-saving writing state");
-
-            UIViewRoot uiViewRoot = facesContext.getViewRoot();
-            //save state in response (client)
-            RenderKit renderKit = getRenderKitFactory().getRenderKit(facesContext, uiViewRoot.getRenderKitId());
+        UIViewRoot uiViewRoot = facesContext.getViewRoot();
+        //save state in response (client)
+        RenderKit renderKit = getRenderKitFactory().getRenderKit(facesContext, uiViewRoot.getRenderKitId());
+        ResponseStateManager responseStateManager = renderKit.getResponseStateManager();
 
+        if (isLegacyResponseStateManager(responseStateManager))
+        {
+            responseStateManager.writeState(facesContext, serializedView);
+        }
+        else
+        {
             Object[] state = new Object[2];
             state[0] = serializedView.getStructure();
             state[1] = serializedView.getState();
-            renderKit.getResponseStateManager().writeState(facesContext, state);
+            responseStateManager.writeState(facesContext, state);
         }
 
         if (log.isTraceEnabled()) log.trace("Exiting writeState");
@@ -469,7 +527,7 @@
     }
 
     protected void saveSerializedViewInServletSession(FacesContext context,
-                                                      SerializedView serializedView)
+                                                      Object serializedView)
     {
         Map sessionMap = context.getExternalContext().getSessionMap();
         SerializedViewCollection viewCollection = (SerializedViewCollection) sessionMap
@@ -484,14 +542,14 @@
         sessionMap.put(SERIALIZED_VIEW_SESSION_ATTR, viewCollection);
     }
 
-    protected SerializedView getSerializedViewFromServletSession(FacesContext context, String viewId)
+    protected Object getSerializedViewFromServletSession(FacesContext context, String viewId)
     {
         ExternalContext externalContext = context.getExternalContext();
         Map requestMap = externalContext.getRequestMap();
-        SerializedView serializedView = null;
+        Object serializedView = null;
         if (requestMap.containsKey(RESTORED_SERIALIZED_VIEW_REQUEST_ATTR))
         {
-            serializedView = (SerializedView) requestMap.get(RESTORED_SERIALIZED_VIEW_REQUEST_ATTR);
+            serializedView = requestMap.get(RESTORED_SERIALIZED_VIEW_REQUEST_ATTR);
         }
         else
         {
@@ -499,7 +557,7 @@
                     .getSessionMap().get(SERIALIZED_VIEW_SESSION_ATTR);
             if (viewCollection != null)
             {
-                String sequenceStr = (String) externalContext.getRequestParameterMap().get(
+                String sequenceStr = externalContext.getRequestParameterMap().get(
                         RendererUtils.SEQUENCE_PARAM);
                 Integer sequence = null;
                 if (sequenceStr == null)
@@ -549,7 +607,7 @@
         }
     }
 
-    protected Object serializeView(FacesContext context, SerializedView serializedView)
+    protected Object serializeView(FacesContext context, Object serializedView)
     {
         if (log.isTraceEnabled()) log.trace("Entering serializeView");
 
@@ -574,9 +632,12 @@
 
                     os.write(UNCOMPRESSED_FLAG);
                 }
+
+                Object[] stateArray = (Object[]) serializedView;
+
                 ObjectOutputStream out = new ObjectOutputStream(os);
-                out.writeObject(serializedView.getStructure());
-                out.writeObject(serializedView.getState());
+                out.writeObject(stateArray[0]);
+                out.writeObject(stateArray[1]);
                 out.close();
                 baos.close();
 
@@ -592,7 +653,7 @@
         else
         {
             if (log.isTraceEnabled()) log.trace("Exiting serializeView - do not serialize state in session.");
-            return new Object[] {serializedView.getStructure(), serializedView.getState()};
+            return serializedView;
         }
     }
 
@@ -609,7 +670,7 @@
         boolean serialize = DEFAULT_SERIALIZE_STATE_IN_SESSION;
         if (value != null)
         {
-           serialize = new Boolean(value).booleanValue();
+           serialize = Boolean.valueOf(value);
         }
         return serialize;
     }
@@ -627,12 +688,12 @@
         boolean compress = DEFAULT_COMPRESS_SERVER_STATE_PARAM;
         if (value != null)
         {
-           compress = new Boolean(value).booleanValue();
+           compress = Boolean.valueOf(value);
         }
         return compress;
     }
 
-    protected SerializedView deserializeView(Object state)
+    protected Object deserializeView(Object state)
     {
         if (log.isTraceEnabled()) log.trace("Entering deserializeView");
 
@@ -650,7 +711,7 @@
                 }
                 ObjectInputStream in = new MyFacesObjectInputStream(
                         is);
-                return new SerializedView(in.readObject(), in.readObject());
+                return new Object[] {in.readObject(), in.readObject()};
             }
             catch (IOException e)
             {
@@ -667,8 +728,7 @@
         {
             if (log.isTraceEnabled()) log.trace("Exiting deserializeView - state not serialized.");
 
-            Object[] value = (Object[]) state;
-            return new SerializedView(value[0], value[1]);
+            return state;
         }
         else if(state == null)
         {
@@ -680,6 +740,21 @@
             log.error("Exiting deserializeView - this method should not be called with a state of type : "+state.getClass());
             return null;
         }
+    }
+
+    private boolean isLegacyResponseStateManager(ResponseStateManager instance) {
+
+        Method[] methods = instance.getClass().getMethods();
+        for (Method m : methods)
+        {
+            if (m.getName().equals("getState") &&
+                    Arrays.equals(m.getParameterTypes(),new Class[] {FacesContext.class, String.class}))
+            {
+                 return false;
+            }
+        }
+
+        return true;
     }
 
     protected static class SerializedViewCollection implements Serializable

Modified: myfaces/core/branches/jsf12/impl/src/main/java/org/apache/myfaces/application/jsp/JspViewHandlerImpl.java
URL: http://svn.apache.org/viewvc/myfaces/core/branches/jsf12/impl/src/main/java/org/apache/myfaces/application/jsp/JspViewHandlerImpl.java?view=diff&rev=495909&r1=495908&r2=495909
==============================================================================
--- myfaces/core/branches/jsf12/impl/src/main/java/org/apache/myfaces/application/jsp/JspViewHandlerImpl.java (original)
+++ myfaces/core/branches/jsf12/impl/src/main/java/org/apache/myfaces/application/jsp/JspViewHandlerImpl.java Sat Jan 13 07:27:05 2007
@@ -40,6 +40,7 @@
 import javax.servlet.ServletResponse;
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
+import javax.servlet.http.HttpSession;
 import javax.servlet.jsp.jstl.core.Config;
 import java.io.IOException;
 import java.io.StringWriter;
@@ -265,7 +266,7 @@
         // store the wrapped response in the request, so it is thread-safe
         externalContext.getRequestMap().put(AFTER_VIEW_TAG_CONTENT_PARAM, wrappedResponse);
         
-        /*
+
         // handle character encoding as of section 2.5.2.2 of JSF 1.1
         if (externalContext.getRequest() instanceof HttpServletRequest) {
             HttpServletRequest httpServletRequest = (HttpServletRequest) externalContext.getRequest();
@@ -275,7 +276,7 @@
                 session.setAttribute(ViewHandler.CHARACTER_ENCODING_KEY, response.getCharacterEncoding());
             }
         }
-        */
+        
         // render the view in this method (since JSF 1.2)
         RenderKitFactory renderFactory = (RenderKitFactory) FactoryFinder.getFactory(FactoryFinder.RENDER_KIT_FACTORY);
         RenderKit renderKit = renderFactory.getRenderKit(facesContext, viewToRender.getRenderKitId());
@@ -357,10 +358,7 @@
      */
     public void writeState(FacesContext facesContext) throws IOException
     {
-        if (facesContext.getApplication().getStateManager().isSavingStateInClient(facesContext))
-        {
-            facesContext.getResponseWriter().write(FORM_STATE_MARKER);
-        }
+        facesContext.getResponseWriter().write(FORM_STATE_MARKER);
     }
 
 
@@ -507,6 +505,9 @@
             facesContext.setResponseWriter(realWriter.cloneWithWriter(stateWriter));
 
             Object serializedView = stateManager.saveView(facesContext);
+
+            System.out.println("SERIALIZED VIEW: "+(serializedView == null));
+
             stateManager.writeState(facesContext, serializedView);
             facesContext.setResponseWriter(realWriter);
 
@@ -530,6 +531,7 @@
 
                 index += bufferSize;
             }
+
         }
     }
 

Modified: myfaces/core/branches/jsf12/impl/src/main/java/org/apache/myfaces/lifecycle/RestoreViewExecutor.java
URL: http://svn.apache.org/viewvc/myfaces/core/branches/jsf12/impl/src/main/java/org/apache/myfaces/lifecycle/RestoreViewExecutor.java?view=diff&rev=495909&r1=495908&r2=495909
==============================================================================
--- myfaces/core/branches/jsf12/impl/src/main/java/org/apache/myfaces/lifecycle/RestoreViewExecutor.java (original)
+++ myfaces/core/branches/jsf12/impl/src/main/java/org/apache/myfaces/lifecycle/RestoreViewExecutor.java Sat Jan 13 07:27:05 2007
@@ -18,26 +18,25 @@
  */
 package org.apache.myfaces.lifecycle;
 
-import java.io.IOException;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.apache.myfaces.portlet.MyFacesGenericPortlet;
+import org.apache.myfaces.portlet.PortletUtil;
+import org.apache.myfaces.shared_impl.renderkit.RendererUtils;
+import org.apache.myfaces.shared_impl.util.RestoreStateUtils;
+import org.apache.myfaces.util.DebugUtils;
 
 import javax.faces.FacesException;
-import javax.faces.render.ResponseStateManager;
 import javax.faces.application.Application;
-import javax.faces.application.ViewHandler;
 import javax.faces.application.ViewExpiredException;
+import javax.faces.application.ViewHandler;
 import javax.faces.component.UIViewRoot;
 import javax.faces.context.ExternalContext;
 import javax.faces.context.FacesContext;
 import javax.faces.event.PhaseId;
+import javax.faces.render.ResponseStateManager;
 import javax.portlet.PortletRequest;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.apache.myfaces.portlet.MyFacesGenericPortlet;
-import org.apache.myfaces.portlet.PortletUtil;
-import org.apache.myfaces.shared_impl.util.RestoreStateUtils;
-import org.apache.myfaces.shared_impl.renderkit.RendererUtils;
-import org.apache.myfaces.util.DebugUtils;
+import java.io.IOException;
 
 /**
  * Implements the Restore View Phase (JSF Spec 2.2.1)
@@ -58,7 +57,7 @@
             throw new FacesException("FacesContext is null");
         }
 
-        // init the ViewHandler
+        // init the View
         Application application = facesContext.getApplication();
         ViewHandler viewHandler = application.getViewHandler();
         viewHandler.initView(facesContext);
@@ -82,7 +81,7 @@
 			if(externalContext.getRequestServletPath() == null) {
 				return true;
 			}
-			
+
 			if (!externalContext.getRequestServletPath().endsWith("/")) {
 				try {
 					externalContext.redirect(externalContext.getRequestServletPath() + "/");
@@ -105,6 +104,7 @@
                 throw new ViewExpiredException("The expected view was not returned " +
                         "for the view identifier: "+viewId);
             }
+            facesContext.setViewRoot(viewRoot);
             RestoreStateUtils.recursivelyHandleComponentReferencesAndSetValid(facesContext, facesContext.getViewRoot());
         }
         else
@@ -119,12 +119,6 @@
 
         facesContext.setViewRoot(viewRoot);
 
-		if (facesContext.getExternalContext().getRequestParameterMap().isEmpty()) {
-			// no POST or query parameters --> set render response flag
-			facesContext.renderResponse();
-		}
-
-		RestoreStateUtils.recursivelyHandleComponentReferencesAndSetValid(facesContext, viewRoot);
 		return false;
 	}
 

Modified: myfaces/core/branches/jsf12/impl/src/main/java/org/apache/myfaces/renderkit/html/HtmlResponseStateManager.java
URL: http://svn.apache.org/viewvc/myfaces/core/branches/jsf12/impl/src/main/java/org/apache/myfaces/renderkit/html/HtmlResponseStateManager.java?view=diff&rev=495909&r1=495908&r2=495909
==============================================================================
--- myfaces/core/branches/jsf12/impl/src/main/java/org/apache/myfaces/renderkit/html/HtmlResponseStateManager.java (original)
+++ myfaces/core/branches/jsf12/impl/src/main/java/org/apache/myfaces/renderkit/html/HtmlResponseStateManager.java Sat Jan 13 07:27:05 2007
@@ -50,6 +50,7 @@
         Object[] savedState = new Object[3];
 
         if (facescontext.getApplication().getStateManager().isSavingStateInClient(facescontext)) {
+            if (log.isTraceEnabled()) log.trace("Writing state in client");
             Object treeStruct = serializedview.getStructure();
             Object compStates = serializedview.getState();
 
@@ -69,6 +70,7 @@
             }
         }
         else {
+            if (log.isTraceEnabled()) log.trace("Writing state in server");
             // write viewSequence
             Object treeStruct = serializedview.getStructure();
             if (treeStruct != null) {
@@ -80,6 +82,8 @@
 
         savedState[VIEWID_PARAM] = facescontext.getViewRoot().getViewId();
 
+        if (log.isTraceEnabled()) log.trace("Writing view state and renderKit fields");
+
         // write the view state field
         writeViewStateField(facescontext, responseWriter, savedState);
 
@@ -128,6 +132,7 @@
 
         if (restoredViewId == null || !restoredViewId.equals(viewId)) {
             //no saved state or state of different viewId
+            if (log.isTraceEnabled()) log.trace("No saved state or state of a different viewId"+restoredViewId);
             return null;
         }
 
@@ -146,8 +151,9 @@
 
         String restoredViewId = (String) savedState[VIEWID_PARAM];
 
-        if (restoredViewId == null || !restoredViewId.equals(facesContext)) {
+        if (restoredViewId == null) {
             //no saved state or state of different viewId
+            if (log.isTraceEnabled()) log.trace("No saved state or state of a different viewId: "+restoredViewId);
             return null;
         }
 

Modified: myfaces/core/branches/jsf12/impl/src/main/java/org/apache/myfaces/taglib/core/ViewTag.java
URL: http://svn.apache.org/viewvc/myfaces/core/branches/jsf12/impl/src/main/java/org/apache/myfaces/taglib/core/ViewTag.java?view=diff&rev=495909&r1=495908&r2=495909
==============================================================================
--- myfaces/core/branches/jsf12/impl/src/main/java/org/apache/myfaces/taglib/core/ViewTag.java (original)
+++ myfaces/core/branches/jsf12/impl/src/main/java/org/apache/myfaces/taglib/core/ViewTag.java Sat Jan 13 07:27:05 2007
@@ -17,8 +17,8 @@
 
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
-import org.apache.myfaces.shared_impl.util.LocaleUtils;
 import org.apache.myfaces.application.jsp.ViewResponseWrapper;
+import org.apache.myfaces.shared_impl.util.LocaleUtils;
 
 import javax.el.ELContext;
 import javax.el.MethodExpression;
@@ -31,8 +31,8 @@
 import javax.faces.webapp.UIComponentELTag;
 import javax.servlet.jsp.JspException;
 import javax.servlet.jsp.jstl.core.Config;
-import java.util.Locale;
 import java.io.IOException;
+import java.util.Locale;
 
 /**
  * @author Manfred Geiler (latest modification by $Author$)
@@ -130,73 +130,6 @@
             FacesContext.getCurrentInstance().getViewRoot().getChildren()
                 .add(verbatimComp);
         }
-        /*
-        BodyContent bodyContent = getBodyContent();
-
-        if (bodyContent != null)
-        {
-
-            FacesContext facesContext = FacesContext.getCurrentInstance();
-
-            StateManager stateManager = facesContext.getApplication().getStateManager();
-            StateManager.SerializedView serializedView
-                    = stateManager.saveSerializedView(facesContext);
-            if (serializedView != null)
-            {
-                //until now we have written to a buffer
-                ResponseWriter bufferWriter = facesContext.getResponseWriter();
-                bufferWriter.flush();
-                //now we switch to real output
-                ResponseWriter realWriter = bufferWriter.cloneWithWriter(getBodyContent().getEnclosingWriter());
-                facesContext.setResponseWriter(realWriter);
-
-                String bodyStr = bodyContent.getString();
-                if ( stateManager.isSavingStateInClient(facesContext) )
-                {
-                    int form_marker = bodyStr.indexOf(JspViewHandlerImpl.FORM_STATE_MARKER);
-                    int url_marker = bodyStr.indexOf(HtmlLinkRendererBase.URL_STATE_MARKER);
-                    int lastMarkerEnd = 0;
-                    while (form_marker != -1 || url_marker != -1)
-                    {
-                        if (url_marker == -1 || (form_marker != -1 && form_marker < url_marker))
-                        {
-                            //replace form_marker
-                            realWriter.write(bodyStr, lastMarkerEnd, form_marker - lastMarkerEnd);
-                            stateManager.writeState(facesContext, serializedView);
-                            lastMarkerEnd = form_marker + JspViewHandlerImpl.FORM_STATE_MARKER_LEN;
-                            form_marker = bodyStr.indexOf(JspViewHandlerImpl.FORM_STATE_MARKER, lastMarkerEnd);
-                        }
-                        else
-                        {
-                            //replace url_marker
-                            realWriter.write(bodyStr, lastMarkerEnd, url_marker - lastMarkerEnd);
-                            if (stateManager instanceof MyfacesStateManager)
-                            {
-                                ((MyfacesStateManager)stateManager).writeStateAsUrlParams(facesContext,
-                                                                                          serializedView);
-                            }
-                            else
-                            {
-                                log.error("Current StateManager is no MyfacesStateManager and does not support saving state in url parameters.");
-                            }
-                            lastMarkerEnd = url_marker + HtmlLinkRendererBase.URL_STATE_MARKER_LEN;
-                            url_marker = bodyStr.indexOf(HtmlLinkRendererBase.URL_STATE_MARKER, lastMarkerEnd);
-                        }
-                    }
-                    realWriter.write(bodyStr, lastMarkerEnd, bodyStr.length() - lastMarkerEnd);
-                }
-                else
-                {
-                    realWriter.write( bodyStr );
-                }
-            }
-            else
-            {
-                bodyContent.writeOut(getBodyContent().getEnclosingWriter());
-            }
-
-        }
-        */
 
         if (log.isTraceEnabled()) log.trace("leaving ViewTag.doAfterBody");
         return EVAL_PAGE;

Modified: myfaces/current12/test-webapp/src/main/java/org/apache/myfaces/blank/HelloWorldBacking.java
URL: http://svn.apache.org/viewvc/myfaces/current12/test-webapp/src/main/java/org/apache/myfaces/blank/HelloWorldBacking.java?view=diff&rev=495909&r1=495908&r2=495909
==============================================================================
--- myfaces/current12/test-webapp/src/main/java/org/apache/myfaces/blank/HelloWorldBacking.java (original)
+++ myfaces/current12/test-webapp/src/main/java/org/apache/myfaces/blank/HelloWorldBacking.java Sat Jan 13 07:27:05 2007
@@ -18,6 +18,8 @@
 */
 package org.apache.myfaces.blank;
 
+import javax.faces.event.ActionEvent;
+
 /**
  * A typical simple backing bean, that is backed to <code>helloworld.jsp</code>
  * 
@@ -28,11 +30,13 @@
     
     //properties
     private String name;
+    private String greeting;
     
     /**
      * default empty constructor
      */
-    public HelloWorldBacking(){   
+    public HelloWorldBacking(){
+        greeting = "Hello";
     }
     
     //-------------------getter & setter
@@ -42,12 +46,27 @@
     public void setName(String name) {
         this.name = name;
     }
-    
+
+    public String getGreeting()
+    {
+        return greeting;
+    }
+
+    public void setGreeting(String greeting)
+    {
+        this.greeting = greeting;
+    }
+
     /**
      * Method that is backed to a submit button of a form.
      */
     public String send(){
         //do real logic
         return ("success");
+    }
+
+    public void updateGreeting(ActionEvent evt)
+    {
+        greeting = "Bye!";
     }
 }

Modified: myfaces/current12/test-webapp/src/main/webapp/WEB-INF/web.xml
URL: http://svn.apache.org/viewvc/myfaces/current12/test-webapp/src/main/webapp/WEB-INF/web.xml?view=diff&rev=495909&r1=495908&r2=495909
==============================================================================
--- myfaces/current12/test-webapp/src/main/webapp/WEB-INF/web.xml (original)
+++ myfaces/current12/test-webapp/src/main/webapp/WEB-INF/web.xml Sat Jan 13 07:27:05 2007
@@ -38,7 +38,7 @@
         <description>State saving method: "client" or "server" (= default)
             See JSF Specification 2.5.3</description>
         <param-name>javax.faces.STATE_SAVING_METHOD</param-name>
-        <param-value>client</param-value>
+        <param-value>server</param-value>
     </context-param>
     <context-param>
         <description>Only applicable if state saving method is "server" (= default).

Modified: myfaces/current12/test-webapp/src/main/webapp/helloWorld.jsp
URL: http://svn.apache.org/viewvc/myfaces/current12/test-webapp/src/main/webapp/helloWorld.jsp?view=diff&rev=495909&r1=495908&r2=495909
==============================================================================
--- myfaces/current12/test-webapp/src/main/webapp/helloWorld.jsp (original)
+++ myfaces/current12/test-webapp/src/main/webapp/helloWorld.jsp Sat Jan 13 07:27:05 2007
@@ -12,7 +12,9 @@
               <h:panelGrid id="grid" columns="2">
                 <h:outputText id="output1" value="Please enter your name"/>
                 <h:inputText id="input1" value="#{helloWorldBacking.name}" required="true"/>
+                <h:outputText value="#{helloWorldBacking.greeting}"/>
                 <h:commandButton id="button1" value="press me" action="#{helloWorldBacking.send}"/>
+                <h:commandLink value="Update greeting" actionListener="#{helloWorldBacking.updateGreeting}"/>
                 <h:message id="message1" for="input1"/>
               </h:panelGrid>
             </h:form>

Modified: myfaces/shared/branches/3_0_0/core/src/main/java/org/apache/myfaces/shared/renderkit/html/HtmlFormRendererBase.java
URL: http://svn.apache.org/viewvc/myfaces/shared/branches/3_0_0/core/src/main/java/org/apache/myfaces/shared/renderkit/html/HtmlFormRendererBase.java?view=diff&rev=495909&r1=495908&r2=495909
==============================================================================
--- myfaces/shared/branches/3_0_0/core/src/main/java/org/apache/myfaces/shared/renderkit/html/HtmlFormRendererBase.java (original)
+++ myfaces/shared/branches/3_0_0/core/src/main/java/org/apache/myfaces/shared/renderkit/html/HtmlFormRendererBase.java Sat Jan 13 07:27:05 2007
@@ -16,7 +16,6 @@
 package org.apache.myfaces.shared.renderkit.html;
 
 import org.apache.myfaces.shared.config.MyfacesConfig;
-import org.apache.myfaces.shared.renderkit.html.HTML;
 
 import javax.faces.application.ViewHandler;
 import javax.faces.component.UIComponent;

Modified: myfaces/shared/branches/3_0_0/core/src/main/java/org/apache/myfaces/shared/taglib/UIComponentELTagUtils.java
URL: http://svn.apache.org/viewvc/myfaces/shared/branches/3_0_0/core/src/main/java/org/apache/myfaces/shared/taglib/UIComponentELTagUtils.java?view=diff&rev=495909&r1=495908&r2=495909
==============================================================================
--- myfaces/shared/branches/3_0_0/core/src/main/java/org/apache/myfaces/shared/taglib/UIComponentELTagUtils.java (original)
+++ myfaces/shared/branches/3_0_0/core/src/main/java/org/apache/myfaces/shared/taglib/UIComponentELTagUtils.java Sat Jan 13 07:27:05 2007
@@ -25,10 +25,10 @@
 import javax.faces.component.EditableValueHolder;
 import javax.faces.component.UICommand;
 import javax.faces.component.UIComponent;
+import javax.faces.component.UIGraphic;
 import javax.faces.component.UIParameter;
 import javax.faces.component.UISelectBoolean;
 import javax.faces.component.ValueHolder;
-import javax.faces.component.UIGraphic;
 import javax.faces.context.FacesContext;
 import javax.faces.convert.Converter;
 import javax.faces.event.MethodExpressionActionListener;
@@ -171,7 +171,7 @@
                                       String propName,
                                       ValueExpression value)
     {
-        setBooleanProperty(component, propName, value);
+        setBooleanProperty(component, propName, value, null);
     }
 
     /**