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 2009/11/11 01:01:53 UTC

svn commit: r834719 - in /myfaces/core/trunk: api/src/main/java/javax/faces/component/ impl/src/main/java/org/apache/myfaces/lifecycle/ impl/src/main/java/org/apache/myfaces/view/facelets/ impl/src/main/java/org/apache/myfaces/view/jsp/

Author: lu4242
Date: Wed Nov 11 00:01:53 2009
New Revision: 834719

URL: http://svn.apache.org/viewvc?rev=834719&view=rev
Log:
MYFACES-2368 Update Render Response Phase to new spec

Modified:
    myfaces/core/trunk/api/src/main/java/javax/faces/component/UIViewRoot.java
    myfaces/core/trunk/impl/src/main/java/org/apache/myfaces/lifecycle/RenderResponseExecutor.java
    myfaces/core/trunk/impl/src/main/java/org/apache/myfaces/view/facelets/FaceletViewDeclarationLanguage.java
    myfaces/core/trunk/impl/src/main/java/org/apache/myfaces/view/jsp/JspViewDeclarationLanguage.java

Modified: myfaces/core/trunk/api/src/main/java/javax/faces/component/UIViewRoot.java
URL: http://svn.apache.org/viewvc/myfaces/core/trunk/api/src/main/java/javax/faces/component/UIViewRoot.java?rev=834719&r1=834718&r2=834719&view=diff
==============================================================================
--- myfaces/core/trunk/api/src/main/java/javax/faces/component/UIViewRoot.java (original)
+++ myfaces/core/trunk/api/src/main/java/javax/faces/component/UIViewRoot.java Wed Nov 11 00:01:53 2009
@@ -288,7 +288,7 @@
             //prerendering happens, we now publish the prerender view event
             //the specs states that the viewroot as source is about to be rendered
             //hence we issue the event immediately before publish, if the phase is not skipped
-            context.getApplication().publishEvent(context, PreRenderViewEvent.class, this);
+            //context.getApplication().publishEvent(context, PreRenderViewEvent.class, this);
             //then the view rendering is about to begin
             super.encodeBegin(context);
         }

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=834719&r1=834718&r2=834719&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 Wed Nov 11 00:01:53 2009
@@ -23,8 +23,11 @@
 import javax.faces.FacesException;
 import javax.faces.application.Application;
 import javax.faces.application.ViewHandler;
+import javax.faces.component.UIViewRoot;
 import javax.faces.context.FacesContext;
 import javax.faces.event.PhaseId;
+import javax.faces.event.PreRenderViewEvent;
+import javax.faces.view.ViewDeclarationLanguage;
 
 /**
  * Implements the lifecycle as described in Spec. 1.0 PFD Chapter 2
@@ -39,10 +42,35 @@
     {
         Application application = facesContext.getApplication();
         ViewHandler viewHandler = application.getViewHandler();
+        UIViewRoot root = facesContext.getViewRoot();
 
+        ViewDeclarationLanguage vdl = viewHandler.getViewDeclarationLanguage(
+                facesContext, root.getViewId());
+        
         try
         {
-            viewHandler.renderView(facesContext, facesContext.getViewRoot());
+            if (vdl != null)
+            {
+                vdl.buildView(facesContext, root);
+            }
+            
+            facesContext.getApplication().publishEvent(
+                    facesContext, PreRenderViewEvent.class, root);
+            
+            // TODO: JSF 2.0 section 2.2.6, it says if the current response
+            // is a partial response(ajax), then there must be no content written
+            // outside of the f:view. This has sense only on jsp case, because            
+            // we don't control jsp rendering and in this way we prevent unwanted
+            // rendering. But note f:ajax only works on facelets, and f:view
+            // tag handler only set properties for the current view root. It's
+            // more, in facelets, every thing that render is a UIComponent instance,
+            // so it is inside view root.
+            // Anyway, we should put the expected behavior (take a look at 
+            // context.servlet.ResponseSwitch) here and enable rendering when
+            // PartialViewContextImpl.processPartialRendering(UIComponent, PhaseId)
+            // do its own work, but for now it is 
+            
+            viewHandler.renderView(facesContext, root);
         }
         catch (IOException e)
         {

Modified: myfaces/core/trunk/impl/src/main/java/org/apache/myfaces/view/facelets/FaceletViewDeclarationLanguage.java
URL: http://svn.apache.org/viewvc/myfaces/core/trunk/impl/src/main/java/org/apache/myfaces/view/facelets/FaceletViewDeclarationLanguage.java?rev=834719&r1=834718&r2=834719&view=diff
==============================================================================
--- myfaces/core/trunk/impl/src/main/java/org/apache/myfaces/view/facelets/FaceletViewDeclarationLanguage.java (original)
+++ myfaces/core/trunk/impl/src/main/java/org/apache/myfaces/view/facelets/FaceletViewDeclarationLanguage.java Wed Nov 11 00:01:53 2009
@@ -807,10 +807,12 @@
             // should that be handled? Or
             // is this optimization simply so minor that it should just
             // be trimmed altogether?
-            if (!isFilledView(context, view))
-            {
-                buildView(context, view);
-            }
+            // See JSF 2.0 spec section 2.2.6, buildView is called before
+            // Render Response
+            //if (!isFilledView(context, view))
+            //{
+            //    buildView(context, view);
+            //}
 
             // setup writer and assign it to the context
             ResponseWriter origWriter = createResponseWriter(context);

Modified: myfaces/core/trunk/impl/src/main/java/org/apache/myfaces/view/jsp/JspViewDeclarationLanguage.java
URL: http://svn.apache.org/viewvc/myfaces/core/trunk/impl/src/main/java/org/apache/myfaces/view/jsp/JspViewDeclarationLanguage.java?rev=834719&r1=834718&r2=834719&view=diff
==============================================================================
--- myfaces/core/trunk/impl/src/main/java/org/apache/myfaces/view/jsp/JspViewDeclarationLanguage.java (original)
+++ myfaces/core/trunk/impl/src/main/java/org/apache/myfaces/view/jsp/JspViewDeclarationLanguage.java Wed Nov 11 00:01:53 2009
@@ -88,6 +88,12 @@
     {
         ExternalContext externalContext = context.getExternalContext();
         ServletResponse response = (ServletResponse) externalContext.getResponse();
+        ServletRequest request = (ServletRequest) externalContext.getRequest();
+        
+        Locale locale = view.getLocale();
+        response.setLocale(locale);
+        Config.set(request, Config.FMT_LOCALE, context.getViewRoot().getLocale());
+
         String viewId = view.getViewId();
         ViewResponseWrapper wrappedResponse = new ViewResponseWrapper((HttpServletResponse) response);
 
@@ -171,15 +177,11 @@
         if (log.isLoggable(Level.FINEST))
             log.finest("Rendering JSP view: " + viewId);
 
+        // Called on render response phase
+        //buildView(context, view);
         ServletResponse response = (ServletResponse) externalContext.getResponse();
         ServletRequest request = (ServletRequest) externalContext.getRequest();
 
-        Locale locale = view.getLocale();
-        response.setLocale(locale);
-        Config.set(request, Config.FMT_LOCALE, context.getViewRoot().getLocale());
-
-        buildView(context, view);
-
         // handle character encoding as of section 2.5.2.2 of JSF 1.1
         if (externalContext.getRequest() instanceof HttpServletRequest)
         {