Как передать «URL с параметрами» в качестве параметра url в GWT

#gwt #url-encoding

#gwt #url-кодирование

Вопрос:

Я вызываю сервлет из клиентского кода GWT, используя RequestBuilder.

В запросе (сообщении) я передаю некоторые данные запроса

builder.sendRequest(postData, new RequestCallback()….

В postData у меня есть параметр URL, называемый «returnToUrl»

Этот «returnToUrl» имеет параметры url и будет выглядеть следующим образом

 returnToUrl = "http://my.server/add?pn=aamp;pd=b";
  

Когда я передаю его сервлету, вторые (и более поздние) параметры (pd=b в моем примере) интерпретируются как параметры запроса для сервлета, а не как часть параметра returnToUrl, и, следовательно, теряются….

Он кодируется по URL, но, конечно, это не меняет символы ‘?’ и ‘amp;’.

Любая помощь высоко ценится!

Комментарии:

1. Это зависит от вашего определения кодировки URL. Например, JavaScript предоставляет два метода, encodeURI (который кодирует только недопустимые символы URI) и encodeURIComponent (который кодирует строку во что-то, что может быть использовано в качестве параметра).

2. Я использую URL.encode() в GWT, что соответствует вашему первому примеру. Существует ли класс / привязка GWT для encodeURIComponent? Если нет, я напишу JSNI, чтобы сделать это…

Ответ №1:

Вам нужно закодировать свои данные в GWT.

Взгляните на класс URL, чтобы сделать это: http://google-web-toolkit.googlecode.com/svn/javadoc/2.4/com/google/gwt/http/client/URL.html

особенно в encodeQueryString, который в основном имеет то же поведение, что и encodeURIComponent в javascript.

Комментарии:

1. Отлично, это работает. Спасибо, Дэниел. Я думаю , что я просматривал более старую версию Javadoc для URL. В любом случае я не видел этого метода, и это спасает жизнь… еще раз спасибо.