2010-11-15 3 views
0

У меня есть List, и я хочу передать его на последующий запрос в качестве параметра строки GET запроса:список передачи данных из JSP в сервлет

<a href="servlet?list=<%=request.getAttribute("list")%>">link</a> 

Внутри сервлета я пытаюсь получить его следующим образом:

String[] list = req.getParameterValues("list"); 

Не работает. Как я могу заставить его работать?

+1

Ваш вопрос крайне необходим для перефразирования. Прочтите http://tinyurl.com/so-hints, чтобы начать –

ответ

1

Атрибут list - это List, и вы не должны полагаться на его toString(), который вызывается в вашем коде (за сценой).

Вместо этого вам необходимо перебрать список и вставить запятые между элементами.

2

Для того, чтобы иметь возможность использовать getParameterValues(), несколько параметров должен быть отправлен в формате:

list=item1&list=item2&list=item3 

Но List#toString() печатает следующий формат (RightClick страницы в браузере и выберите View Source, чтобы увидеть его):

list=[item1,item2,item3] 

Очевидно, что это не сработает. Есть несколько способов решить эту проблему:

  1. Как сказал Bozho, распечатать его через запятую (или оставить его без изменений) и использовать request.getParameter() вместо и разделить строку и населить список, используя обычные String метод как split(), substring() , indexOf() и т. Д.

  2. Просто распечатайте его в ожидаемом формате. Наименее было бы создать для этого функцию EL.

  3. Хранить его в сессии:

    request.getSession().setAttribute("list", list); 
    

    , так что вы можете просто извлечь его из той же сессии в следующем запросе:

    List list = (List) request.getSession().getAttribute("list"); 
    

    При необходимости, вы можете передать ключ, параметр запроса.

  4. Если у вас уже есть список на стороне сервера (область приложения, база данных и т. Д.), Просто не передавайте список. Передавайте только те параметры, вокруг которых дается достаточно информации для перезагрузки/повторного заполнения списка в сервлете. Строка запроса имеет ограничение максимальной длины, которое должно предпочтительно не превышать 255 символов ASCII. Если список содержит более сотни элементов, вы рискуете, что они будут урезаны в любом случае.