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

14 comments:

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

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

    ReplyDelete
  3. Thanks a lot!!!!

    ReplyDelete
  4. thanks a lot!! you saved my day!!

    ReplyDelete
  5. thanks it's helpful again thank you !

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

    ReplyDelete
  7. Thanks,
    i was looking for houres...

    ReplyDelete
  8. 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
    }

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

    ReplyDelete