You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@myfaces.apache.org by ja...@apache.org on 2010/05/31 23:12:05 UTC

svn commit: r949866 - in /myfaces/core/trunk/impl/src: main/java/org/apache/myfaces/lifecycle/ test/java/org/apache/myfaces/lifecycle/

Author: jakobk
Date: Mon May 31 21:12:04 2010
New Revision: 949866

URL: http://svn.apache.org/viewvc?rev=949866&view=rev
Log:
MYFACES-2734 Character encoding not set correctly before Restore View

Modified:
    myfaces/core/trunk/impl/src/main/java/org/apache/myfaces/lifecycle/ApplyRequestValuesExecutor.java
    myfaces/core/trunk/impl/src/main/java/org/apache/myfaces/lifecycle/InvokeApplicationExecutor.java
    myfaces/core/trunk/impl/src/main/java/org/apache/myfaces/lifecycle/LifecycleImpl.java
    myfaces/core/trunk/impl/src/main/java/org/apache/myfaces/lifecycle/PhaseExecutor.java
    myfaces/core/trunk/impl/src/main/java/org/apache/myfaces/lifecycle/ProcessValidationsExecutor.java
    myfaces/core/trunk/impl/src/main/java/org/apache/myfaces/lifecycle/RenderResponseExecutor.java
    myfaces/core/trunk/impl/src/main/java/org/apache/myfaces/lifecycle/RestoreViewExecutor.java
    myfaces/core/trunk/impl/src/main/java/org/apache/myfaces/lifecycle/UpdateModelValuesExecutor.java
    myfaces/core/trunk/impl/src/test/java/org/apache/myfaces/lifecycle/RestoreViewExecutorTest.java

Modified: myfaces/core/trunk/impl/src/main/java/org/apache/myfaces/lifecycle/ApplyRequestValuesExecutor.java
URL: http://svn.apache.org/viewvc/myfaces/core/trunk/impl/src/main/java/org/apache/myfaces/lifecycle/ApplyRequestValuesExecutor.java?rev=949866&r1=949865&r2=949866&view=diff
==============================================================================
--- myfaces/core/trunk/impl/src/main/java/org/apache/myfaces/lifecycle/ApplyRequestValuesExecutor.java (original)
+++ myfaces/core/trunk/impl/src/main/java/org/apache/myfaces/lifecycle/ApplyRequestValuesExecutor.java Mon May 31 21:12:04 2010
@@ -22,13 +22,12 @@ import javax.faces.context.FacesContext;
 import javax.faces.event.PhaseId;
 
 /**
- * Implements the lifecycle as described in Spec. 1.0 PFD Chapter 2
+ * Implements the apply request values phase (JSF Spec 2.2.2)
  * 
- * @author Nikolay Petrov
- * 
- *         Apply request values phase (JSF Spec 2.2.2)
+ * @author Nikolay Petrov (latest modification by $Author$)
+ * @version $Revision$ $Date$
  */
-class ApplyRequestValuesExecutor implements PhaseExecutor
+class ApplyRequestValuesExecutor extends PhaseExecutor
 {
     public boolean execute(FacesContext facesContext)
     {

Modified: myfaces/core/trunk/impl/src/main/java/org/apache/myfaces/lifecycle/InvokeApplicationExecutor.java
URL: http://svn.apache.org/viewvc/myfaces/core/trunk/impl/src/main/java/org/apache/myfaces/lifecycle/InvokeApplicationExecutor.java?rev=949866&r1=949865&r2=949866&view=diff
==============================================================================
--- myfaces/core/trunk/impl/src/main/java/org/apache/myfaces/lifecycle/InvokeApplicationExecutor.java (original)
+++ myfaces/core/trunk/impl/src/main/java/org/apache/myfaces/lifecycle/InvokeApplicationExecutor.java Mon May 31 21:12:04 2010
@@ -22,13 +22,12 @@ import javax.faces.context.FacesContext;
 import javax.faces.event.PhaseId;
 
 /**
- * Implements the lifecycle as described in Spec. 1.0 PFD Chapter 2
+ * Implements the invoke application phase (JSF Spec 2.2.5)
  * 
- * @author Nikolay Petrov
- * 
- *         Invoke application phase (JSF Spec 2.2.5)
+ * @author Nikolay Petrov (latest modification by $Author$)
+ * @version $Revision$ $Date$
  */
-class InvokeApplicationExecutor implements PhaseExecutor
+class InvokeApplicationExecutor extends PhaseExecutor
 {
     public boolean execute(FacesContext facesContext)
     {

Modified: myfaces/core/trunk/impl/src/main/java/org/apache/myfaces/lifecycle/LifecycleImpl.java
URL: http://svn.apache.org/viewvc/myfaces/core/trunk/impl/src/main/java/org/apache/myfaces/lifecycle/LifecycleImpl.java?rev=949866&r1=949865&r2=949866&view=diff
==============================================================================
--- myfaces/core/trunk/impl/src/main/java/org/apache/myfaces/lifecycle/LifecycleImpl.java (original)
+++ myfaces/core/trunk/impl/src/main/java/org/apache/myfaces/lifecycle/LifecycleImpl.java Mon May 31 21:12:04 2010
@@ -130,6 +130,9 @@ public class LifecycleImpl extends Lifec
             context.setCurrentPhaseId(currentPhaseId);
             
             flash.doPrePhaseActions(context);
+            
+            // let the PhaseExecutor do some pre-phase actions
+            executor.doPrePhaseActions(context);
 
             phaseListenerMgr.informPhaseListenersBefore(currentPhaseId);
 
@@ -200,6 +203,10 @@ public class LifecycleImpl extends Lifec
                 facesContext.setCurrentPhaseId(renderExecutor.getPhase());
                 
                 flash.doPrePhaseActions(facesContext);
+                
+                // let the PhaseExecutor do some pre-phase actions
+                renderExecutor.doPrePhaseActions(facesContext);
+                
                 boolean renderResponse = phaseListenerMgr.informPhaseListenersBefore(renderExecutor.getPhase());
                 // also possible that one of the listeners completed the response
                 if (isResponseComplete(facesContext, renderExecutor.getPhase(), true))

Modified: myfaces/core/trunk/impl/src/main/java/org/apache/myfaces/lifecycle/PhaseExecutor.java
URL: http://svn.apache.org/viewvc/myfaces/core/trunk/impl/src/main/java/org/apache/myfaces/lifecycle/PhaseExecutor.java?rev=949866&r1=949865&r2=949866&view=diff
==============================================================================
--- myfaces/core/trunk/impl/src/main/java/org/apache/myfaces/lifecycle/PhaseExecutor.java (original)
+++ myfaces/core/trunk/impl/src/main/java/org/apache/myfaces/lifecycle/PhaseExecutor.java Mon May 31 21:12:04 2010
@@ -24,10 +24,10 @@ import javax.faces.event.PhaseId;
 /**
  * Implements the PhaseExecutor for a lifecycle
  * 
- * @author Nikolay Petrov
- * 
+ * @author Nikolay Petrov (latest modification by $Author$)
+ * @version $Revision$ $Date$
  */
-interface PhaseExecutor
+abstract class PhaseExecutor
 {
 
     /**
@@ -38,12 +38,26 @@ interface PhaseExecutor
      *            The <code>FacesContext</code> for the current request we are processing
      * @return <code>true</code> if execution should be stopped
      */
-    boolean execute(FacesContext facesContext);
+    public abstract boolean execute(FacesContext facesContext);
 
     /**
      * Returns the <code>PhaseId</code> for which the implemented executor is invoked
      * 
      * @return
      */
-    PhaseId getPhase();
-}
\ No newline at end of file
+    public abstract PhaseId getPhase();
+    
+    /**
+     * This method will be called by LifecycleImpl before the phase associated with this
+     * PhaseExecutor actually starts (before the before-PhaseListeners are called). 
+     * Thus the PhaseExecutor implementation will be able to do some pre-phase initialisation work.
+     * 
+     * @param facesContext
+     * @since 2.0.1
+     */
+    public void doPrePhaseActions(FacesContext facesContext)
+    {
+        // default: nothing
+    }
+    
+}

Modified: myfaces/core/trunk/impl/src/main/java/org/apache/myfaces/lifecycle/ProcessValidationsExecutor.java
URL: http://svn.apache.org/viewvc/myfaces/core/trunk/impl/src/main/java/org/apache/myfaces/lifecycle/ProcessValidationsExecutor.java?rev=949866&r1=949865&r2=949866&view=diff
==============================================================================
--- myfaces/core/trunk/impl/src/main/java/org/apache/myfaces/lifecycle/ProcessValidationsExecutor.java (original)
+++ myfaces/core/trunk/impl/src/main/java/org/apache/myfaces/lifecycle/ProcessValidationsExecutor.java Mon May 31 21:12:04 2010
@@ -22,13 +22,12 @@ import javax.faces.context.FacesContext;
 import javax.faces.event.PhaseId;
 
 /**
- * Implements the lifecycle as described in Spec. 1.0 PFD Chapter 2
+ * Implements the process validations phase (JSF Spec 2.2.3)
  * 
- * @author Nikolay Petrov
- * 
- *         Process validations phase (JSF Spec 2.2.3)
+ * @author Nikolay Petrov (latest modification by $Author$)
+ * @version $Revision$ $Date$
  */
-class ProcessValidationsExecutor implements PhaseExecutor
+class ProcessValidationsExecutor extends PhaseExecutor
 {
     public boolean execute(FacesContext facesContext)
     {

Modified: myfaces/core/trunk/impl/src/main/java/org/apache/myfaces/lifecycle/RenderResponseExecutor.java
URL: http://svn.apache.org/viewvc/myfaces/core/trunk/impl/src/main/java/org/apache/myfaces/lifecycle/RenderResponseExecutor.java?rev=949866&r1=949865&r2=949866&view=diff
==============================================================================
--- myfaces/core/trunk/impl/src/main/java/org/apache/myfaces/lifecycle/RenderResponseExecutor.java (original)
+++ myfaces/core/trunk/impl/src/main/java/org/apache/myfaces/lifecycle/RenderResponseExecutor.java Mon May 31 21:12:04 2010
@@ -33,13 +33,12 @@ import javax.faces.event.PreRenderViewEv
 import javax.faces.view.ViewDeclarationLanguage;
 
 /**
- * Implements the lifecycle as described in Spec. 1.0 PFD Chapter 2
+ * Implements the render response phase (JSF Spec 2.2.6)
  * 
- * @author Nikolay Petrov
- * 
- *         render response phase (JSF Spec 2.2.6)
+ * @author Nikolay Petrov (latest modification by $Author$)
+ * @version $Revision$ $Date$
  */
-class RenderResponseExecutor implements PhaseExecutor
+class RenderResponseExecutor extends PhaseExecutor
 {
     
     private static final Logger log = Logger.getLogger(RenderResponseExecutor.class.getName());

Modified: myfaces/core/trunk/impl/src/main/java/org/apache/myfaces/lifecycle/RestoreViewExecutor.java
URL: http://svn.apache.org/viewvc/myfaces/core/trunk/impl/src/main/java/org/apache/myfaces/lifecycle/RestoreViewExecutor.java?rev=949866&r1=949865&r2=949866&view=diff
==============================================================================
--- myfaces/core/trunk/impl/src/main/java/org/apache/myfaces/lifecycle/RestoreViewExecutor.java (original)
+++ myfaces/core/trunk/impl/src/main/java/org/apache/myfaces/lifecycle/RestoreViewExecutor.java Mon May 31 21:12:04 2010
@@ -40,18 +40,27 @@ import org.apache.myfaces.renderkit.Erro
 /**
  * Implements the Restore View Phase (JSF Spec 2.2.1)
  * 
- * @author Nikolay Petrov
+ * @author Nikolay Petrov (latest modification by $Author$)
  * @author Bruno Aranda (JSF 1.2)
  * @version $Revision$ $Date$
- * 
  */
-class RestoreViewExecutor implements PhaseExecutor
+class RestoreViewExecutor extends PhaseExecutor
 {
 
     //private static final Log log = LogFactory.getLog(RestoreViewExecutor.class);
     private static final Logger log = Logger.getLogger(RestoreViewExecutor.class.getName());
     
     private RestoreViewSupport _restoreViewSupport;
+    
+    @Override
+    public void doPrePhaseActions(FacesContext facesContext)
+    {
+        // Call initView() on the ViewHandler. 
+        // This will set the character encoding properly for this request.
+        // Note that we are doing this here, because we need the character encoding
+        // to be set as early as possible (before any PhaseListener is executed).
+        facesContext.getApplication().getViewHandler().initView(facesContext);
+    }
 
     public boolean execute(FacesContext facesContext)
     {
@@ -60,15 +69,10 @@ class RestoreViewExecutor implements Pha
             throw new FacesException("FacesContext is null");
         }
 
-        // init the View
+        // get some required Objects
         Application application = facesContext.getApplication();
         ViewHandler viewHandler = application.getViewHandler();
-        
-        // Call initView() on the ViewHandler. This will set the character encoding properly for this request.
-        viewHandler.initView(facesContext);
-
         UIViewRoot viewRoot = facesContext.getViewRoot();
-
         RestoreViewSupport restoreViewSupport = getRestoreViewSupport();
 
         // Examine the FacesContext instance for the current request. If it already contains a UIViewRoot

Modified: myfaces/core/trunk/impl/src/main/java/org/apache/myfaces/lifecycle/UpdateModelValuesExecutor.java
URL: http://svn.apache.org/viewvc/myfaces/core/trunk/impl/src/main/java/org/apache/myfaces/lifecycle/UpdateModelValuesExecutor.java?rev=949866&r1=949865&r2=949866&view=diff
==============================================================================
--- myfaces/core/trunk/impl/src/main/java/org/apache/myfaces/lifecycle/UpdateModelValuesExecutor.java (original)
+++ myfaces/core/trunk/impl/src/main/java/org/apache/myfaces/lifecycle/UpdateModelValuesExecutor.java Mon May 31 21:12:04 2010
@@ -22,13 +22,12 @@ import javax.faces.context.FacesContext;
 import javax.faces.event.PhaseId;
 
 /**
- * Implements the lifecycle as described in Spec. 1.0 PFD Chapter 2
+ * Implements the update model values phase (JSF Spec 2.2.4)
  * 
- * @author Nikolay Petrov
- * 
- *         Update model values phase (JSF Spec 2.2.4)
+ * @author Nikolay Petrov (latest modification by $Author$)
+ * @version $Revision$ $Date$
  */
-class UpdateModelValuesExecutor implements PhaseExecutor
+class UpdateModelValuesExecutor extends PhaseExecutor
 {
     public boolean execute(FacesContext facesContext)
     {

Modified: myfaces/core/trunk/impl/src/test/java/org/apache/myfaces/lifecycle/RestoreViewExecutorTest.java
URL: http://svn.apache.org/viewvc/myfaces/core/trunk/impl/src/test/java/org/apache/myfaces/lifecycle/RestoreViewExecutorTest.java?rev=949866&r1=949865&r2=949866&view=diff
==============================================================================
--- myfaces/core/trunk/impl/src/test/java/org/apache/myfaces/lifecycle/RestoreViewExecutorTest.java (original)
+++ myfaces/core/trunk/impl/src/test/java/org/apache/myfaces/lifecycle/RestoreViewExecutorTest.java Mon May 31 21:12:04 2010
@@ -74,6 +74,7 @@ public class RestoreViewExecutorTest ext
         _restoreViewSupport.processComponentBinding(same(_facesContext), same(viewRoot));
 
         _mocksControl.replay();
+        _testimpl.doPrePhaseActions(_facesContext);
         _testimpl.execute(_facesContext);
         _mocksControl.verify();
     }
@@ -105,6 +106,7 @@ public class RestoreViewExecutorTest ext
         _facesContext.setViewRoot(same(viewRoot));
 
         _mocksControl.replay();
+        _testimpl.doPrePhaseActions(_facesContext);
         _testimpl.execute(_facesContext);
         _mocksControl.verify();
     }
@@ -127,6 +129,7 @@ public class RestoreViewExecutorTest ext
         _facesContext.setProcessingEvents(eq(false));
 
         _mocksControl.replay();
+        _testimpl.doPrePhaseActions(_facesContext);
         _testimpl.execute(_facesContext);
         _mocksControl.verify();
     }
@@ -150,6 +153,7 @@ public class RestoreViewExecutorTest ext
         {
             public void run() throws Throwable
             {
+                _testimpl.doPrePhaseActions(_facesContext);
                 _testimpl.execute(_facesContext);
             };
         });