Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Передача параметров при sendRedirect(...) 
V
    Опции темы
LjaO
Дата 10.9.2009, 11:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 7
Регистрация: 8.9.2009

Репутация: нет
Всего: нет




Идея состоит в том что бы словить request, добавить в него параметр, и отслать обратно баузеру для повторной посылки.
В случае когда в запросе никаких параметров не было - всё работало отлично. Если же у меня есть некоторые параметры в запросе - при редиректе они теряются и остаётся только мой добавленный.
Ниже описана проблема потери старых параметров при sendRedirect() и так же преобразование в ljava.lang.String параметров доставаемых из getParametrsMap()

Самое простое решение, которое я сейчас вижу - это взять все параметры из request и добавить их в url вместе с новым параметром.
Но к сожалению тут я наткнулся на проблему.

Код

StringBuffer url = request.getRequestURL().append("?serverID=2");
Enumeration keys = request.getParameterNames();
while(keys.hasMoreElements())
{
     Object key = keys.nextElement();
     Object value = request.getParameterMap().get(key);
     url.append("&").append(key).append("=").append(value);
}
response.sendRedirect(url.toString());


В итоге запрос имеет вид 
".../luser/filter.action2?SERVERID=2&autoRefresh=[Ljava.lang.String@d2bd3f&...." 
вместо 
".../luser/filter.action2?SERVERID=2&autoRefresh=1?...."

Может кто мне подсказать - как  эту проблему победить?
PM MAIL   Вверх
garbuz
Дата 10.9.2009, 12:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 677
Регистрация: 22.1.2008

Репутация: 8
Всего: 11



Цитата(LjaO @  10.9.2009,  11:01 Найти цитируемый пост)
[Ljava.lang.String@d2bd3f&...

Насколько я помню, это массив, посмотрите точно, что вы передаете в качестве значения.
PM MAIL   Вверх
LjaO
Дата 10.9.2009, 15:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 7
Регистрация: 8.9.2009

Репутация: нет
Всего: нет



Да так и есть.
ServletRequest::getParametrsMap.get(some_key) возвращает массив строк.
Поборол проблему следующим способ :
Код

StringBuffer url = request.getRequestURL().append("?").append(SERVER_KEY).append("=2"); // Adding new parametr
/**
* Check - do we have any parametrs in request. If so - add them to the URI as parametrs.
* As I said before "request.getParameterMap().get(key)" returns String[], but I need to put all values back to the browser.
*/
Enumeration keys = request.getParameterNames();
while(keys.hasMoreElements()) 
 {
  Object key = keys.nextElement();
   url.append("&").append(key).append("=");
   String[] values = (String[])request.getParameterMap().get(key);
   for(int i=0; i< values.length;i++)
   {
    url.append(values[i]);
    if(i != values.length-1 && values.length > 1)
     {
      url.append(",");
     }
    }
 }
response.sendRedirect(url.toString());


Самому мне несильно нравиться этот способ .. но он работает  .. причём на ура.
Быстро и просто.
Далее конечно последует code-refactoring smile

Это сообщение отредактировал(а) LjaO - 10.9.2009, 15:30
PM MAIL   Вверх
LjaO
Дата 10.9.2009, 15:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 7
Регистрация: 8.9.2009

Репутация: нет
Всего: нет



Если кто то подскажет более элегантный способ решения - с удовольствие опробую.
PM MAIL   Вверх
andyhomes
Дата 10.9.2009, 16:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 57
Регистрация: 14.7.2009

Репутация: 2
Всего: 2



Используйте:
request.getParameter(...)

Нужно понимать, почему параметр (в карте параметров) представлен именно массивом...
(Даю наводку: представьте, например, HTML-форму в которой много одноименных input-полей.)

PM MAIL   Вверх
COVD
Дата 10.9.2009, 16:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1655
Регистрация: 26.7.2005

Репутация: 4
Всего: 43



Допустимая длина url имеет разные значения для разных браузеров и серверов. Обычно не рекомендуется превышать 2000 символов. Это ограничение необходимо учитывать при добавлении параметров в url.   
PM MAIL   Вверх
necromancer
Дата 15.9.2009, 15:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 317
Регистрация: 26.7.2006
Где: Москва

Репутация: 6
Всего: 7



жестоко =)
1 нужно учитывать вдруг урл редиректа уже имеет строку вида ?paramName=value 
2 У объекта реквест можно получить готовую строку запроса - getQueryString если я не ошибаюсь и не перебирать parameter map
3 Есть классная но сложная для освоения бибилотека http://www.google.ru/search?q=urlrewrite&a...lient=firefox-a
4 ну и наконец можно было просто описать проблему =) может ее можно было бы решить более элегантным способом не прибегая к таким вещам =)


--------------------
С уважением, 
                 Виталий Смык
----------------------------------------------------------------------------------------------
SCJP, SCWCD, OCA
http://dev.maryno.net/video/
PM MAIL WWW ICQ Skype   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java EE (J2EE) и Spring | Следующая тема »


 




[ Время генерации скрипта: 0.0457 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.