Сервлет, JSP, JavaBeans и HTML-форма - PullRequest
1 голос
/ 05 марта 2010

Я работаю над сервлетом, который устанавливает соединение с базой данных, получает информацию об одной из таблиц и отправляет эту информацию в файл jsp. Этот файл распечатает на браузере информационную таблицу, добавив переключатели, позволяющие нам выбрать одну из строк.

Сервлет выглядит так:

List<InfoBean> items = new ArrayList<InfoBean>();
if (!conexion.isClosed()){
  Statement st = (Statement) conexion.createStatement();          
  ResultSet rs = st.executeQuery("select * from lista_audio" );
  while (rs.next())
  {items.add(getRow(rs));}
  conexion.close();}
req.getSession().setAttribute("items", items);

В файле JSP я могу напечатать таблицу с информацией, добавив переключатели, которые пользователь будет использовать, чтобы выбрать 1 строку, и отправить выбранную информацию сервлету, используя форму, которую я могу добавить:

< form action="administ" method=get enctype=multipart/form-data>    
< table>
 < table border=\"1\">< tr>< th>Title< /th>< th>Author< /th>< th>Album< /th>< /tr>
 < c:forEach items="${items}" var="item">
 < tr>< td><input type="radio" name="SongInfo" value=${item.title}>
 < td>${item.title}< /td>
 < td>${item.author}< /td>
 < td>${item.album}< /td>< /tr>
 < /c:forEach>
< /table>

В поле 'value' я должен иметь возможность отправить сервлету информацию, хранящуюся в $ {item.title}. Когда я устанавливаю значение = $ {item.title} и название, например, «Телохранитель», в сервлете информация, которую я могу получить, это просто «The». Похоже, что он отправляет символы, расположенные перед первым пробелом строки. Как я могу получить всю строку?

Спасибо

1 Ответ

0 голосов
/ 05 марта 2010

Проверьте сгенерированный вывод HTML (щелкните правой кнопкой мыши страницу в браузере, выберите «Просмотр источника»). Ты что-то не пропустил?

<input type="radio" name="SongInfo" value=The bodyguard>

Да, кавычки (обратите внимание на разницу в выделенном цвете, bodyguard стал атрибутом).

Итак, исправьте это:

<input type="radio" name="SongInfo" value="${item.title}">

Таким образом, он будет сгенерирован следующим образом:

<input type="radio" name="SongInfo" value="The bodyguard">

Простое исправление, не так ли? :)


Тем не менее, ваш код JDBC подвержен утечкам ресурсов. Вы должны закрыть все ресурсы Connection, Statement и ResultSet в блоке finally блока, в котором вы их получили. Дополнительные советы см. в этой статье . Также список не обязательно должен быть помещен в область действия сеанса. Кроме того, HTML-код синтаксически недопустим, но это может быть просто ошибка копирования, в противном случае он не сработал бы.

Далее, ваша HTML-форма объявлена ​​для использования метода запроса GET, но также объявлена ​​для использования типа кодировки multipart/form-data. Это не имеет никакого смысла. Только используйте этот enctype всякий раз, когда у вас есть <input type="file">, и если это так, метод запроса должен быть POST.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...