我正在开发一个与数据库建立连接的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>
在字段'value'中,我应该能够将存储在$ {item.title}中的信息发送给servlet。当我设置value = $ {item.title}并且title是例如“bodyguard”时,在servlet中我可以检索的信息就是“The”。它看起来像是发送位于字符串第一个空格之前的字符。我怎么能得到整个字符串?
由于
答案 0 :(得分:0)
检查生成的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代码容易出现资源泄漏。您应该关闭已获取它们的try块的finally块中的所有资源Connection
,Statement
和ResultSet
。有关更多提示,请参阅this article。此列表也不一定需要放在会话范围内。此外HTML在语法上是无效的,但这可能只是一个copypaste错误,否则它将无法正常工作。
此外,您的HTML表单被声明为使用GET
的请求方法,但也声明它使用multipart/form-data
的编码类型。这没有任何意义。每当有<input type="file">
时,仅使用此enctype,如果是这种情况,则请求方法应为POST
。