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