Reputation: 4413
I'd like to know if there's any way to send data to the server for the selected rows using the checkboxes I've put on those rows? I mean , how can I send only the data (in this case mileage ) of those selected rows (selected with the checkboxes) to the server ? see the image
Here's the html code I use:
<table>
<thead>
<tr class="tableheader">
<td width="10%"></td>
<td width="30%">Vehicle</td>
<td width="40%">Driver</td>
<td width="10%">Mileage</td>
</tr>
</thead>
<tbody>
<c:forEach items="${list}" var="item">
<tr>
<td align="center">
<input type="checkbox" name="selectedItems"
value="c:out value="${item.numberPlate}"/>"/>
</td>
<td align="left"><c:out value="${item.numberPlate}"/></td>
<td align="left"><c:out value="${item.driver.fullName}" /></td>
<td align="left"><input type="text" name="mileage" value="" /></td>
</tr>
</c:forEach>
</tbody>
</table>
I really hope you can give some guidance on this.
Thanks in beforehand.
Upvotes: 2
Views: 16931
Reputation: 1109635
Change the mileage
input as follows:
<c:forEach items="${list}" var="item">
<tr>
<td align="center">
<input type="checkbox" name="selectedItems"
value="<c:out value="${item.numberPlate}"/>"/>
</td>
<td align="left"><c:out value="${item.numberPlate}"/></td>
<td align="left"><c:out value="${item.driver.fullName}" /></td>
<td align="left"><input type="text" name="mileage_<c:out value="${item.numberPlate}"/>" value="" /></td>
</tr>
</c:forEach>
Gather it as follows:
String[] selectedItems = request.getParameterValues("selectedItems");
for (String selectedItem : selectedItems) {
String mileage = request.getParameter("mileage_" + selectedItem);
// ...
}
No need for nasty JS workarounds.
Upvotes: 8
Reputation: 38441
First off, I'd suggest to make sure that your server-side script ignores the "non-checked" data, because you never can be sure that the JavaScript will actually work or isn't manipulated by the user.
However currently you have no way too associate each check box with its mileage input, so you should consider giving each an individual name such as {numberplate}-mileage
.
That would also simplify the JavaScript. (I'm using jQuery here, becuase it quicker):
jQuery("input[name=selectedItems]").click(
var chkbox = $(this);
$("input[name=" + checkbox.val() + "-mileage]").attr("disabled", checkbox[0].checked ? "" : "disabled");
);
(Disabled input elements don't submit their value).
Upvotes: 0
Reputation: 23644
According to HTML's FORM spec, items with same name will be grouped to single value separated by comma. So just bind your bean to form result and split value of 'selectedItems' by comma.
Upvotes: 0