Author: mgrigorov
Date: Mon Jul 18 09:00:12 2011
New Revision: 1147790
URL: http://svn.apache.org/viewvc?rev=1147790&view=rev
Log:
WICKET-3908 Encoding problem with POSTing a form with Ajax
Forms submitted with Ajax are always encoded with UTF-8. (HttpXmlRequest
doesn't support other encoding for x-form-www-urlencoded).
Modified:
wicket/trunk/wicket-core/src/main/java/org/apache/wicket/protocol/http/WebApplication.java
wicket/trunk/wicket-core/src/main/java/org/apache/wicket/protocol/http/WicketFilter.java
Modified:
wicket/trunk/wicket-core/src/main/java/org/apache/wicket/protocol/http/WebApplication.java
URL:
http://svn.apache.org/viewvc/wicket/trunk/wicket-core/src/main/java/org/apache/wicket/protocol/http/WebApplication.java?rev=1147790&r1=1147789&r2=1147790&view=diff
==============================================================================
---
wicket/trunk/wicket-core/src/main/java/org/apache/wicket/protocol/http/WebApplication.java
(original)
+++
wicket/trunk/wicket-core/src/main/java/org/apache/wicket/protocol/http/WebApplication.java
Mon Jul 18 09:00:12 2011
@@ -62,6 +62,7 @@ import org.apache.wicket.session.HttpSes
import org.apache.wicket.session.ISessionStore;
import org.apache.wicket.util.IContextProvider;
import org.apache.wicket.util.IProvider;
+import org.apache.wicket.util.crypt.CharEncoding;
import org.apache.wicket.util.file.FileCleaner;
import org.apache.wicket.util.file.IFileCleaner;
import org.apache.wicket.util.file.IResourceFinder;
@@ -388,26 +389,32 @@ public abstract class WebApplication ext
}
/**
- * Create a new WebRequest. Subclasses of WebRequest could e.g. decode
and obfuscated URL which
+ * Create a new WebRequest. Subclasses of WebRequest could e.g. decode
and obfuscate URL which
* has been encoded by an appropriate WebResponse.
*
* @param servletRequest
+ * the current HTTP Servlet request
* @param filterPath
* the filter mapping read from web.xml
* @return a WebRequest object
*/
protected WebRequest newWebRequest(HttpServletRequest servletRequest,
final String filterPath)
{
- String requestEncoding =
getRequestCycleSettings().getResponseRequestEncoding();
- try
- {
- servletRequest.setCharacterEncoding(requestEncoding);
- }
- catch (UnsupportedEncodingException e)
- {
- throw new RuntimeException(e);
- }
+ return new ServletWebRequest(servletRequest, filterPath);
+ }
+ /**
+ * Pre- and post- configures the {@link WebRequest} created by user
override-able
+ * {@link #newWebRequest(HttpServletRequest, String)}
+ *
+ * @param servletRequest
+ * the current HTTP Sservlet request
+ * @param filterPath
+ * the filter mapping read from web.xml
+ * @return a WebRequest object
+ */
+ WebRequest createWebRequest(HttpServletRequest servletRequest, final
String filterPath)
+ {
if (hasFilterFactoryManager())
{
for (AbstractRequestWrapperFactory factory :
getFilterFactoryManager())
@@ -416,7 +423,27 @@ public abstract class WebApplication ext
}
}
- return new ServletWebRequest(servletRequest, filterPath);
+ WebRequest webRequest = newWebRequest(servletRequest,
filterPath);
+
+ try
+ {
+ if (webRequest.isAjax())
+ {
+ // WICKET-3908: Forms submitted with Ajax are
always UTF-8 encoded
+
servletRequest.setCharacterEncoding(CharEncoding.UTF_8);
+ }
+ else
+ {
+ String requestEncoding =
getRequestCycleSettings().getResponseRequestEncoding();
+
servletRequest.setCharacterEncoding(requestEncoding);
+ }
+ }
+ catch (UnsupportedEncodingException e)
+ {
+ throw new RuntimeException(e);
+ }
+
+ return webRequest;
}
/**
@@ -425,14 +452,31 @@ public abstract class WebApplication ext
* to decode the encoded URL.
*
* @param webRequest
+ * the {@link WebRequest} that will handle the current HTTP
Servlet request
* @param httpServletResponse
+ * the current HTTP Servlet response
* @return a WebResponse object
*/
protected WebResponse newWebResponse(final WebRequest webRequest,
final HttpServletResponse httpServletResponse)
{
- ServletWebResponse webResponse = new
ServletWebResponse((ServletWebRequest)webRequest,
- httpServletResponse);
+ return new ServletWebResponse((ServletWebRequest)webRequest,
httpServletResponse);
+ }
+
+ /**
+ * Pre- and post- configures the {@link WebResponse} returned from
+ * {@link #newWebResponse(WebRequest, HttpServletResponse)}
+ *
+ * @param webRequest
+ * the {@link WebRequest} that will handle the current HTTP
Servlet request
+ * @param httpServletResponse
+ * the current HTTP Servlet response
+ * @return the configured WebResponse object
+ */
+ WebResponse createWebResponse(final WebRequest webRequest,
+ final HttpServletResponse httpServletResponse)
+ {
+ WebResponse webResponse = newWebResponse(webRequest,
httpServletResponse);
boolean shouldBufferResponse =
getRequestCycleSettings().getBufferResponse();
return shouldBufferResponse ? new
HeaderBufferingWebResponse(webResponse) : webResponse;
Modified:
wicket/trunk/wicket-core/src/main/java/org/apache/wicket/protocol/http/WicketFilter.java
URL:
http://svn.apache.org/viewvc/wicket/trunk/wicket-core/src/main/java/org/apache/wicket/protocol/http/WicketFilter.java?rev=1147790&r1=1147789&r2=1147790&view=diff
==============================================================================
---
wicket/trunk/wicket-core/src/main/java/org/apache/wicket/protocol/http/WicketFilter.java
(original)
+++
wicket/trunk/wicket-core/src/main/java/org/apache/wicket/protocol/http/WicketFilter.java
Mon Jul 18 09:00:12 2011
@@ -152,8 +152,8 @@ public class WicketFilter implements Fil
// No redirect; process the request
ThreadContext.setApplication(application);
- WebRequest webRequest =
application.newWebRequest(httpServletRequest, filterPath);
- WebResponse webResponse =
application.newWebResponse(webRequest,
+ WebRequest webRequest =
application.createWebRequest(httpServletRequest, filterPath);
+ WebResponse webResponse =
application.createWebResponse(webRequest,
httpServletResponse);
RequestCycle requestCycle =
application.createRequestCycle(webRequest, webResponse);