我有一个HTML文件,向用户显示数据库的内容(显示为表格)。用户可以选择其中一行。完成此操作后,用户所做的选择将发送到将使用该信息的servlet。
想象一下,这个servlet将查找与用户选择的信息相关的文件。我想做的是为用户提供选择,同时选择servlet将要查找的文件数。这样,用户应该能够选择表中显示的行之一,并且还应该能够键入要查找的文件的数量。
到目前为止,我能够将用户在表中选择的内容发送给servlet,但我想知道是否可以将所请求的文件数附加到此信息中。
这是我的代码:
<center><form action="administ" method=post >
<center><table>
<table border=\"1\"><tr><th></th><th>Titleo</th><th>Author</th><th>Album</th></tr>
<c:forEach items="${items}" var="item">
<tr>
<td><input type="radio" name="Song" value="${item.file}@${item.title}#${item.author}$${item.album}">
<td>${item.title}</td>
<td>${item.author}</td>
<td>${item.album}</td>
</tr>
</c:forEach>
</table></center>
<tr><td colspan=2><input type=submit value = play name = option></td></tr>
<tr><td colspan=2><input type=submit value = Delete name = option></td></tr>
此时我想添加一个新选项,它不仅需要一个新按钮,还需要用户引入一个数字。
答案 0 :(得分:1)
这取决于。如果您想使用单选按钮单个选择行,那么您只需将一个输入字段放在表的底部,然后按下提交按钮。 E.g:
<input type="text" name="numberOfFiles">
你可以在servlet中获得如下:
String numberOfFiles = request.getParameter("numberOfFiles");
但是如果你想要使用复选框多次选择行,或者你希望这个字段以任何方式出现在每一行中,那么你需要给radio / checkbox字段一个行索引的值。如果您使用JSTL <c:forEach>
迭代行(我希望您确实这样做),那么您可以使用varStatus
属性来声明LoopTagStatus
。在循环内部,您可以通过LoopTagStatus#getIndex()
获取行索引。 E.g:
<table>
<c:forEach items="${items}" var="item" varStatus="loop">
<tr>
<td><input type="checkbox" name="selected" value="${loop.index}"></td>
<td><input type="text" name="number"></td>
</tr>
</c:forEach>
</table>
<input type="submit">
(要进行单一选择,只需将type="checkbox"
替换为type="radio"
)
在servlet中,您可以获得与表中显示的顺序相同的所有输入字段,如下所示:
String[] numbersOfFiles = request.getParameterValues("numberOfFiles");
使用复选框选择,您可以获得所有选定的行索引,从而获得相关的输入字段,如下所示:
String[] selectedIndexes = request.getParameterValues("selected");
for (String selectedIndex : selectedIndexes) {
int index = Integer.parseInt(selectedIndex);
String numberOfFiles = numbersOfFiles[index];
// ...
}
或者,如果它是无线电按钮选择的行,则以任何方式进行单选:
String selectedIndex = request.getParameter("selected");
int index = Integer.parseInt(selectedIndex);
String numberOfFiles = numbersOfFiles[index];