一尘不染

Servlet,JSP,JavaBeans和HTML表单

jsp

我正在使用一个servlet,该servlet与数据库建立连接以获取表之一的信息,并将该信息发送到jsp文件。该文件将打印在浏览器信息表中,并添加单选按钮,使我们可以选择其中的一行。

servlet看起来像这样:

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行,然后使用我可以添加的表单将所选信息发送到servlet:

< 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>

在“值”字段中,我应该能够将$ {item.title}中存储的信息发送到servlet。当我将value设置为$
{item.title}且title为例如“保镖”时,在servlet中,我可以检索到的信息仅为“
The”。它看起来像发送位于字符串的第一个空格之前的字符。我怎么能得到整个字符串?

谢谢


阅读 234

收藏
2020-06-10

共1个答案

一尘不染

检查生成的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代码容易出现资源泄漏。您应该关闭所有资源ConnectionStatementResultSet在try块的finally块中获得它们。有关更多提示,请参阅本文。同样,列表不一定需要放在会话范围内。HTML在语法上也是无效的,但这可能只是一个复制粘贴错误,否则它将无法正常工作。

进一步,您的HTML表单被声明为使用的request方法GET,但也被声明为使用的编码类型multipart/form-data。这完全没有道理。
在有an时使用此enctype <input type="file">,如果是这种情况,则request方法应该为POST

2020-06-10