我在html/jsp/servlett编程领域是全新的。实际上,我正在开发一个创建动态复选框的项目。它们中的每一个都应该具有不同的值。
<c:forEach items="${sessionScope.camlist}" var="cam">
<form id="updatePermission" method="post" action="<%=request.getContextPath() %>/PermissionHandling?operation=update_permissions&id=${cam.kameraid}" >
<table>
<td>${cam.kameraid}</td>
<script>
console.log("${cam.kameraid}");
</script>
<td>'${cam.standort}'</td>
<td>'${cam.url}'</td>
<td>${cam.aufnahmeinterval}</td>
<td>
<c:set var="checked" value="false"/>
<c:forEach items="${sessionScope.permissionList}" var="perm">
<c:if test="${perm.kameraid eq cam.kameraid}">
<input type="checkbox" name="selection" checked="checked" value="${cam.kameraid}" onClick="callServlett()">
<c:set var="checked" value="true"/>
<c:set var="continueExecuting" scope="request" value="false"/>
</c:if>
</c:forEach>
<c:if test="${checked eq false}">
<input type="checkbox" name="selection" value="${cam.kameraid}" onClick="callServlett()">
</c:if>
</td>
</table>
</form>
</c:forEach>
</div>
</section>
<script>
function callServlett()
{
document.getElementById("updatePermission").submit();
}
</script>
因此,通过这样做,我得到了一个表格,其中每行的复选框都会根据用户是否具有权限进行初始化。 当复选框被单击修改时,我想将相机ID的calue提交到我的servlett,这将处理其余的工作。
Servlett:
String[] selections = request.getParameterValues("selection");
选择总是"3",除非我轻舔第一个复选框,然后它是空的。
谁能告诉我为什么这段代码没有按我预期工作?
您需要将<form>
标签放在forEach
循环之外。如果你把每个循环放在里面,将创建新的表单标签,它可能无法按你想要的方式工作。
<form id="updatePermission" method="post" action="<%=request.getContextPath() %>/PermissionHandling?operation=update_permissions&id=${cam.kameraid}" >
<c:forEach items="${sessionScope.camlist}" var="cam">
<!-- html code -->
</c:forEach>
</form>
与其每次点击都调用servlet
checkbox
保留一个按钮并在单击按钮时调用servlet
。这将减少从浏览器到服务器的迭代次数。