JSP中无表单将GET请求替换为POST请求的实现方案
实现JSP表格行点击发起POST请求(无表单方式)
核心思路是通过JavaScript动态创建表单并提交,将表格行的参数作为POST请求的隐藏字段传递,避免参数暴露在URL中。以下是完整的修改方案:
步骤1:添加JavaScript提交函数
在JSP页面的<head>标签内或表格下方添加以下JS函数,用于动态创建POST表单并提交:
<script type="text/javascript"> function submitPostRequest(name, numero, dateNaissance) { // 创建动态表单 var form = document.createElement('form'); form.method = 'POST'; form.action = 'ResultServlet'; form.target = 'gauche'; // 保持和原逻辑一致,在指定框架打开结果 // 添加隐藏参数 var nameInput = document.createElement('input'); nameInput.type = 'hidden'; nameInput.name = 'name'; nameInput.value = name; form.appendChild(nameInput); var numeroInput = document.createElement('input'); numeroInput.type = 'hidden'; numeroInput.name = 'numero'; numeroInput.value = numero; form.appendChild(numeroInput); var dateInput = document.createElement('input'); dateInput.type = 'hidden'; dateInput.name = 'date_naissance'; dateInput.value = dateNaissance; form.appendChild(dateInput); // 提交表单并清理DOM document.body.appendChild(form); form.submit(); document.body.removeChild(form); } </script>
步骤2:修改表格行的点击事件及修复循环问题
原代码存在循环逻辑错误(<tr>标签在for循环外,只会渲染最后一行数据),同时修改onclick事件调用上述JS函数:
<table border=0 bgcolor=#92ADC2 cellspacing=1 cellpadding=3 width=95% align=center> <tr class=entete> <td class=texte8 align=center> <spring:message code="nom"/></td> <td class=texte8 align=center> <spring:message code="date_naissance"/></td> <td class=texte8 align=center> <spring:message code="numero"/></td> </tr> <% String v_Person = ""; String v_date = ""; String v_numero = ""; for (int i = 0; i < PersonListeBean.getPerson(); i++) { Gen_rechBean cb = PersonListeBean.getPerson(i); v_Person = cb.getname(); v_date=cb.getdate(); v_numero=cb.getNumero(); %> <tr class="<%=class_cell%>" onMouseOver="this.className='over';" onMouseOut="this.className='<%=class_cell%>';" onclick="submitPostRequest('<%=v_Person%>', '<%=v_numero%>', '<%=v_date%>')"> <td class=texte7 align=left > <%=cb.getname()%></td> <td class=texte7 align=left > <%=cb.getdate()%></td> <td class=texte7 align=left > <%=cb.getNumero()%></td> </tr> <% } %> </table> <br> <table width="95%" align="center" border="0" cellspacing="0" cellpadding="0"> <tr> <td align="right"> <a target="corps" href="rechResult.jsp" class="rub2">返回</a> <!-- 修复原未闭合的a标签 --> </td> </tr> </table>
关键说明
- 动态表单:通过JS创建的表单不会在页面显示,提交后立即移除,不影响页面布局。
- 参数传递:所有参数通过隐藏
<input>字段以POST方式发送,不会出现在URL中。 - 框架目标:保持
target='gauche'确保结果在原指定的框架中渲染,和原逻辑一致。 - 循环修复:将
<tr>标签移入for循环内部,确保每一行数据都能正确渲染。
内容的提问来源于stack exchange,提问作者karDEVproj
相关产品推荐
相关产品推荐

