用foreach循环出list集合查出来的数据显示在jsp在修改传到action,怎么传?

时间:2021-08-27 19:36:28
用foreach循环出list集合查出来的数据显示在jsp表单文本框上,在修改内容,怎么把文本框上值传到action,由于查出来有多条数据name属性名一样,怎么传?
<c:forEach items="${list}" var="li">
<tr>
<td class="list_data_ltext" height="24">
<input id="jh" name="jh" value="${li.plaTodo }" />
<input type="button"  value="保存" onclick="cztz('chance.do?method=upJhPlan&id=${li.plaId}')">
</td>
</tr>
</c:forEach>


id可以传,因为没修改,但是jh那个文本框修改后的值怎么传?cztz()一个js方法传个路径进去跳转
要是我加上onclick="cztz('chance.do?method=upJhPlan&id=${li.plaId})&jh=${li.plaTodo }那传的就是查出来的那个值

10 个解决方案

#1


onclick="cztz('chance.do?method=upJhPlan&id=${li.plaId})&jh='+document.getElementById("jh").value

#2


把每一组数据放在一个form里,提交的时候使用document.forms[下标].submit()的方式提交

#3


像这种表单上需要提交多个值的情况就别用什么JS提交了
给table套一个form
后再把参数名对应好,提交之后想要什么拿什么不就完了,id大不了放到隐藏域
何必这么麻烦

#4


看错了,你的貌似是修改列表,那更简单
在Action定义一个List或者数组
给你的foreach标签顶一个varStatus,比如varStatus="aaa"
aaa.index可以取到循环的索引
你的表单的name可以这样传:jh[aaa.index]
这样后台的List或者数组就能对应上
最后在后台遍历更新就OK了

#5


引用 1 楼 rui888 的回复:
onclick="cztz('chance.do?method=upJhPlan&id=${li.plaId})&jh='+document.getElementById("jh").value

你这就不对了吧,id选择器什么时候能到取循环里的东西了,目测永远返回第一行的数据。

#6


document.getElementById("jh").value---改为 name 然后索引 放 foreach 的index。
没看清循环

#7



<c:forEach items="${list}" var="li">
<tr>
<td class="list_data_ltext" height="24">
<input id="jh${li.plaId}" name="jh" value="${li.plaTodo }" />
<input type="button"  value="保存" onclick="cztz('chance.do?method=upJhPlan&id=${li.plaId}','${li.plaId}')">
</td>
</tr>
</c:forEach>
function cztz(url,id){
var name = document.getElementById("jh"+id).value;
window.location.href = url+"&name="+name;
}


第一,在你input的id属性中加上你当前id这样确保唯一。
第二,在调用方法的时候,传入foreach中的id的值,这样确保你当前修改的正确性。

#9


4楼说的那样。前台遍历的时候,name值取数组名+下标。例如:name="userList[index].uName",index为遍历时的下标,userList为即将传到后台的数组,提交一次表单就可以了。

#10


如果这样的话,你写一个js就OK了,用form估计不妥...

#1


onclick="cztz('chance.do?method=upJhPlan&id=${li.plaId})&jh='+document.getElementById("jh").value

#2


把每一组数据放在一个form里,提交的时候使用document.forms[下标].submit()的方式提交

#3


像这种表单上需要提交多个值的情况就别用什么JS提交了
给table套一个form
后再把参数名对应好,提交之后想要什么拿什么不就完了,id大不了放到隐藏域
何必这么麻烦

#4


看错了,你的貌似是修改列表,那更简单
在Action定义一个List或者数组
给你的foreach标签顶一个varStatus,比如varStatus="aaa"
aaa.index可以取到循环的索引
你的表单的name可以这样传:jh[aaa.index]
这样后台的List或者数组就能对应上
最后在后台遍历更新就OK了

#5


引用 1 楼 rui888 的回复:
onclick="cztz('chance.do?method=upJhPlan&id=${li.plaId})&jh='+document.getElementById("jh").value

你这就不对了吧,id选择器什么时候能到取循环里的东西了,目测永远返回第一行的数据。

#6


document.getElementById("jh").value---改为 name 然后索引 放 foreach 的index。
没看清循环

#7



<c:forEach items="${list}" var="li">
<tr>
<td class="list_data_ltext" height="24">
<input id="jh${li.plaId}" name="jh" value="${li.plaTodo }" />
<input type="button"  value="保存" onclick="cztz('chance.do?method=upJhPlan&id=${li.plaId}','${li.plaId}')">
</td>
</tr>
</c:forEach>
function cztz(url,id){
var name = document.getElementById("jh"+id).value;
window.location.href = url+"&name="+name;
}


第一,在你input的id属性中加上你当前id这样确保唯一。
第二,在调用方法的时候,传入foreach中的id的值,这样确保你当前修改的正确性。

#8


#9


4楼说的那样。前台遍历的时候,name值取数组名+下标。例如:name="userList[index].uName",index为遍历时的下标,userList为即将传到后台的数组,提交一次表单就可以了。

#10


如果这样的话,你写一个js就OK了,用form估计不妥...