Tuesday, January 23, 2007

GWT POST request doesn't include parameters

Keywords:
GWT POST request parameters HTTP HTML RequestBuilder AJAX

Problem:
Following the GWT documentation for making a http-post but it's not clear what the post data should look like if you want it to include form parameters. The newer documentation for com.google.gwt.http.client has a bit more detail but the server side code processing the request (a java servlet) says there's no parameters in the request.

Solution:
It's not in the documentation, but if you want to post form data you must set the "Content-type" header value in the request to "application/x-www-form-urlencoded"

For Example:
StringBuffer postData = new StringBuffer();
// note param pairs are separated by a '&' 
// and each key-value pair is separated by a '='
postData.append(URL.encode("YourParameterName")).append("=").append(URL.encode("YourParameterValue"));
postData.append("&");
postData.append(URL.encode("YourParameterName2")).append("=").append(URL.encode("YourParameterValue2"));

RequestBuilder builder = new RequestBuilder(RequestBuilder.POST, "/yourserver/formprocessor"));
builder.setHeader("Content-type", "application/x-www-form-urlencoded");
try {
  builder.sendRequest(postData.toString(), this /* or other RequestCallback impl*/);
} catch (RequestException e) {
  // handle this
}


Notes:
This sample chapter from the JavaScript™ Phrasebook is useful: Sending a POST Request

15 comments:

David said...

This is great thank, I just spent the last 4 hours trying to work out why it wasnt work

Anonymous said...

Thanks,
This was very helpful:) saved me alot of time.

Anonymous said...

Thanks a lot!!!!

Stefan said...

Wonderful :)

Anonymous said...

thanks a lot!! you saved my day!!

boukhary said...

thanks it's helpful again thank you !

Olaf Steinicke said...

Thanks a lot! Tried hard the last few hours and now at least this point works!

Hackle said...

Thanks,
i was looking for houres...

Shaoting said...

Thank you! Saved my time!

Marko Sacher said...

Alternative:

StringBuffer postData = new StringBuffer();
// note param pairs are separated by a '&'
// and each key-value pair is separated by a '='
postData.append(URL.encode("YourParameterName")).append("=").append(URL.encode("YourParameterValue"));
postData.append("&");
postData.append(URL.encode("YourParameterName2")).append("=").append(URL.encode("YourParameterValue2"));

RequestBuilder builder = new RequestBuilder(RequestBuilder.POST, "/yourserver/formprocessor"));
builder.setHeader("Content-type", "application/x-www-form-urlencoded");
builder.setRequestData(postData);
builder.setCallback(this /* or other RequestCallback impl*/);
try {
builder.send();
} catch (RequestException e) {
// handle this
}

Keith said...

This was really helpful and saved my time. Has anyone of you guys tested this code for file uploading?

Nick Gochiashvili said...

Thanks a Lot!

demartino said...

Thx, very helpful

saurabh said...

thanks

saurabh said...

thnks