You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@myfaces.apache.org by ma...@apache.org on 2007/08/10 09:32:29 UTC
svn commit: r564496 - in
/myfaces/trinidad/tags/trinidad-1.0.2/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal:
config/xmlHttp/ renderkit/core/ webapp/
Author: matzew
Date: Fri Aug 10 00:32:25 2007
New Revision: 564496
URL: http://svn.apache.org/viewvc?view=rev&rev=564496
Log:
Merged Adam's commit "Revision: 564273" to the 102-release tag
TRINIDAD-46: PPR over AJAX
- A final bug fix before releasing 1.0.2: ensure that all incoming AJAX requests are
decoded into UTF-8, instead of the encoding of the original page.
- Thanks to Daniel Niklas for identifying the issue
Added:
myfaces/trinidad/tags/trinidad-1.0.2/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/config/xmlHttp/XmlHttpServletRequest.java
Modified:
myfaces/trinidad/tags/trinidad-1.0.2/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/config/xmlHttp/XmlHttpConfigurator.java
myfaces/trinidad/tags/trinidad-1.0.2/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/config/xmlHttp/XmlHttpServletResponse.java
myfaces/trinidad/tags/trinidad-1.0.2/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/renderkit/core/CoreRenderKit.java
myfaces/trinidad/tags/trinidad-1.0.2/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/webapp/TrinidadFilterImpl.java
Modified: myfaces/trinidad/tags/trinidad-1.0.2/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/config/xmlHttp/XmlHttpConfigurator.java
URL: http://svn.apache.org/viewvc/myfaces/trinidad/tags/trinidad-1.0.2/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/config/xmlHttp/XmlHttpConfigurator.java?view=diff&rev=564496&r1=564495&r2=564496
==============================================================================
--- myfaces/trinidad/tags/trinidad-1.0.2/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/config/xmlHttp/XmlHttpConfigurator.java (original)
+++ myfaces/trinidad/tags/trinidad-1.0.2/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/config/xmlHttp/XmlHttpConfigurator.java Fri Aug 10 00:32:25 2007
@@ -27,6 +27,7 @@
import javax.faces.context.ExternalContext;
import javax.servlet.ServletException;
+import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletResponse;
@@ -56,6 +57,11 @@
public static ServletResponse getWrappedServletResponse(ServletResponse response)
{
return new XmlHttpServletResponse(response);
+ }
+
+ public static ServletRequest getAjaxServletRequest(ServletRequest request)
+ {
+ return new XmlHttpServletRequest(request);
}
public static void beginRequest(ExternalContext externalContext)
Added: myfaces/trinidad/tags/trinidad-1.0.2/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/config/xmlHttp/XmlHttpServletRequest.java
URL: http://svn.apache.org/viewvc/myfaces/trinidad/tags/trinidad-1.0.2/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/config/xmlHttp/XmlHttpServletRequest.java?view=auto&rev=564496
==============================================================================
--- myfaces/trinidad/tags/trinidad-1.0.2/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/config/xmlHttp/XmlHttpServletRequest.java (added)
+++ myfaces/trinidad/tags/trinidad-1.0.2/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/config/xmlHttp/XmlHttpServletRequest.java Fri Aug 10 00:32:25 2007
@@ -0,0 +1,66 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.myfaces.trinidadinternal.config.xmlHttp;
+
+import java.io.UnsupportedEncodingException;
+
+import javax.servlet.ServletRequest;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletRequestWrapper;
+
+import org.apache.myfaces.trinidad.logging.TrinidadLogger;
+
+/**
+ * Wrapper used to force AJAX requests to be treated as UTF-8,
+ * since they all are UTF-8.
+ */
+@SuppressWarnings("deprecation")
+final class XmlHttpServletRequest extends HttpServletRequestWrapper
+{
+ XmlHttpServletRequest(ServletRequest request)
+ {
+ super((HttpServletRequest)request);
+
+ try
+ {
+ super.setCharacterEncoding("UTF-8");
+ }
+ catch (UnsupportedEncodingException uee)
+ {
+ // Should NEVER happen, since UTF-8 is supported everywhere
+ _LOG.severe(uee);
+ }
+ }
+
+ @Override
+ public void setCharacterEncoding(String encoding)
+ {
+ _LOG.fine("Ignoring attempt to set encoding to {0} in an AJAX request",
+ encoding);
+ }
+
+ @Override
+ public String getCharacterEncoding()
+ {
+ return "UTF-8";
+ }
+
+ static private final TrinidadLogger _LOG =
+ TrinidadLogger.createTrinidadLogger(XmlHttpServletRequest.class);
+}
Modified: myfaces/trinidad/tags/trinidad-1.0.2/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/config/xmlHttp/XmlHttpServletResponse.java
URL: http://svn.apache.org/viewvc/myfaces/trinidad/tags/trinidad-1.0.2/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/config/xmlHttp/XmlHttpServletResponse.java?view=diff&rev=564496&r1=564495&r2=564496
==============================================================================
--- myfaces/trinidad/tags/trinidad-1.0.2/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/config/xmlHttp/XmlHttpServletResponse.java (original)
+++ myfaces/trinidad/tags/trinidad-1.0.2/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/config/xmlHttp/XmlHttpServletResponse.java Fri Aug 10 00:32:25 2007
@@ -29,6 +29,7 @@
import org.apache.myfaces.trinidad.logging.TrinidadLogger;
import org.apache.myfaces.trinidadinternal.renderkit.core.ppr.XmlResponseWriter;
+@SuppressWarnings("deprecation")
final class XmlHttpServletResponse extends HttpServletResponseWrapper
{
XmlHttpServletResponse(ServletResponse response)
Modified: myfaces/trinidad/tags/trinidad-1.0.2/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/renderkit/core/CoreRenderKit.java
URL: http://svn.apache.org/viewvc/myfaces/trinidad/tags/trinidad-1.0.2/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/renderkit/core/CoreRenderKit.java?view=diff&rev=564496&r1=564495&r2=564496
==============================================================================
--- myfaces/trinidad/tags/trinidad-1.0.2/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/renderkit/core/CoreRenderKit.java (original)
+++ myfaces/trinidad/tags/trinidad-1.0.2/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/renderkit/core/CoreRenderKit.java Fri Aug 10 00:32:25 2007
@@ -147,6 +147,11 @@
return "org.apache.myfaces.trinidad.core.desktop";
}
+ static public boolean isAjaxRequest(ExternalContext ec)
+ {
+ return "true".equals(ec.getRequestHeaderMap().get(_PPR_REQUEST_HEADER));
+ }
+
static public boolean isPartialRequest(Map<String, String[]> parameters)
{
String[] array = parameters.get(_PPR_REQUEST_HEADER);
@@ -157,7 +162,9 @@
static public boolean isPartialRequest(ExternalContext ec)
{
- return "true".equals(ec.getRequestHeaderMap().get(_PPR_REQUEST_HEADER)) ||
+ // A partial request could be an AJAX request, or it could
+ // be an IFRAME-postback to handle file upload
+ return isAjaxRequest(ec) ||
"true".equals(ec.getRequestParameterMap().get(_PPR_REQUEST_HEADER));
}
Modified: myfaces/trinidad/tags/trinidad-1.0.2/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/webapp/TrinidadFilterImpl.java
URL: http://svn.apache.org/viewvc/myfaces/trinidad/tags/trinidad-1.0.2/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/webapp/TrinidadFilterImpl.java?view=diff&rev=564496&r1=564495&r2=564496
==============================================================================
--- myfaces/trinidad/tags/trinidad-1.0.2/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/webapp/TrinidadFilterImpl.java (original)
+++ myfaces/trinidad/tags/trinidad-1.0.2/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/webapp/TrinidadFilterImpl.java Fri Aug 10 00:32:25 2007
@@ -137,7 +137,19 @@
}
else
{
- isPartialRequest = CoreRenderKit.isPartialRequest(externalContext);
+ // Only test for AJAX request, since file uploads *should* be
+ // handled by the above test. NOTE: this will not necessarily
+ // work if someone is using Trinidad PPR with non-Trinidad
+ // file upload! I've no idea currently how to cleanly handle
+ // that combination in JSF 1.1. We don't want to ask if
+ // its a partial request here, as this requires getting a
+ // query parameter, but that could block setting
+ // the character set later in the request in some app servers!
+ isPartialRequest = CoreRenderKit.isAjaxRequest(externalContext);
+ if (isPartialRequest)
+ {
+ request = XmlHttpConfigurator.getAjaxServletRequest(request);
+ }
}
if (isPartialRequest)