Это зависит. Если вы хотите один выбор строк с помощью радиокнопок, то вы можете просто поместить одно поле ввода внизу таблицы, рядом с кнопкой отправки или около того. E.g.:
<input type="text" name="numberOfFiles">
, который вы можете получить в сервлете следующим образом:
String numberOfFiles = request.getParameter("numberOfFiles");
Но если вы хотите множественный выбор строк с использованием флажков или если вы хотите, чтобы это поле появлялось в каждой строке каким-либо образом, вам нужно присвоить полю радио / флажок значение индекса строки. Если вы используете 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"
)
В сервлете вы можете получить все поля ввода с одинаковыми именами в том порядке, в котором они указаны в таблице следующим образом:
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];