You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@myfaces.apache.org by lo...@apache.org on 2010/09/10 10:26:39 UTC

svn commit: r995697 - /myfaces/tobago/trunk/tobago-theme/tobago-theme-scarborough/src/main/java/org/apache/myfaces/tobago/renderkit/html/scarborough/standard/tag/PageRenderer.java

Author: lofwyr
Date: Fri Sep 10 08:26:39 2010
New Revision: 995697

URL: http://svn.apache.org/viewvc?rev=995697&view=rev
Log:
TOBAGO-909: Postback detection fails with JSF Impl 1.1.01 and MyFaces 1.1.4
 - Checking if the state will be rendered, if not write the hidden field explicitly 
(is only active for JSF 1.1)

Modified:
    myfaces/tobago/trunk/tobago-theme/tobago-theme-scarborough/src/main/java/org/apache/myfaces/tobago/renderkit/html/scarborough/standard/tag/PageRenderer.java

Modified: myfaces/tobago/trunk/tobago-theme/tobago-theme-scarborough/src/main/java/org/apache/myfaces/tobago/renderkit/html/scarborough/standard/tag/PageRenderer.java
URL: http://svn.apache.org/viewvc/myfaces/tobago/trunk/tobago-theme/tobago-theme-scarborough/src/main/java/org/apache/myfaces/tobago/renderkit/html/scarborough/standard/tag/PageRenderer.java?rev=995697&r1=995696&r2=995697&view=diff
==============================================================================
--- myfaces/tobago/trunk/tobago-theme/tobago-theme-scarborough/src/main/java/org/apache/myfaces/tobago/renderkit/html/scarborough/standard/tag/PageRenderer.java (original)
+++ myfaces/tobago/trunk/tobago-theme/tobago-theme-scarborough/src/main/java/org/apache/myfaces/tobago/renderkit/html/scarborough/standard/tag/PageRenderer.java Fri Sep 10 08:26:39 2010
@@ -32,10 +32,12 @@ import org.apache.myfaces.tobago.context
 import org.apache.myfaces.tobago.internal.component.AbstractUIPage;
 import org.apache.myfaces.tobago.internal.layout.LayoutContext;
 import org.apache.myfaces.tobago.internal.util.AccessKeyMap;
+import org.apache.myfaces.tobago.internal.util.FastStringWriter;
 import org.apache.myfaces.tobago.internal.util.MimeTypeUtils;
 import org.apache.myfaces.tobago.internal.util.ResponseUtils;
 import org.apache.myfaces.tobago.layout.Measure;
 import org.apache.myfaces.tobago.renderkit.PageRendererBase;
+import org.apache.myfaces.tobago.renderkit.TobagoResponseStateManager;
 import org.apache.myfaces.tobago.renderkit.css.Classes;
 import org.apache.myfaces.tobago.renderkit.css.Style;
 import org.apache.myfaces.tobago.renderkit.html.HtmlAttributes;
@@ -44,6 +46,7 @@ import org.apache.myfaces.tobago.renderk
 import org.apache.myfaces.tobago.renderkit.html.util.HtmlRendererUtils;
 import org.apache.myfaces.tobago.renderkit.util.RenderUtils;
 import org.apache.myfaces.tobago.util.ComponentUtils;
+import org.apache.myfaces.tobago.util.FacesVersion;
 import org.apache.myfaces.tobago.util.VariableResolverUtils;
 import org.apache.myfaces.tobago.webapp.TobagoResponseWriter;
 import org.slf4j.Logger;
@@ -525,7 +528,33 @@ public class PageRenderer extends PageRe
     writer.startElement(HtmlElements.SPAN, null);
     writer.writeIdAttribute(clientId + ComponentUtils.SUB_SEPARATOR + "jsf-state-container");
     writer.flush();
-    viewHandler.writeState(facesContext);
+    if (FacesVersion.supports12()) {
+      viewHandler.writeState(facesContext);
+    } else {
+      // catch the next written stuff into a string and look if it is empty (TOBAGO-909)
+      FastStringWriter buffer = new FastStringWriter(40); // usually only the marker...
+      TobagoResponseWriter originalWriter = (TobagoResponseWriter) facesContext.getResponseWriter();
+      writer = (TobagoResponseWriter) writer.cloneWithWriter(buffer);
+      facesContext.setResponseWriter(writer);
+      viewHandler.writeState(facesContext);
+      final String stateContent = buffer.toString();
+      writer = originalWriter;
+      facesContext.setResponseWriter(writer);
+
+      if (StringUtils.isBlank(stateContent)) {
+        if (LOG.isDebugEnabled()) {
+          LOG.debug("Writing state will not happen! So we write the hidden field manually.");
+        }
+        writer.startElement(HtmlElements.INPUT, null);
+        writer.writeAttribute(HtmlAttributes.TYPE, "hidden", false);
+        writer.writeAttribute(HtmlAttributes.NAME, TobagoResponseStateManager.TREE_PARAM, false);
+        writer.writeAttribute(HtmlAttributes.ID, TobagoResponseStateManager.TREE_PARAM, false);
+        writer.writeAttribute(HtmlAttributes.VALUE, "workaround", false);
+        writer.endElement(HtmlElements.INPUT);
+      } else {
+        writer.write(stateContent);
+      }
+    }
     writer.endElement(HtmlElements.SPAN);
 
     // avoid submit page in ie if the form contains only one input and you press the enter key in the input