You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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>&nbsp;<spring:message code="nom"/></td>
        <td class=texte8 align=center>&nbsp;<spring:message code="date_naissance"/></td>
        <td class=texte8 align=center>&nbsp;<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 >&nbsp;<%=cb.getname()%></td>
                        <td class=texte7 align=left >&nbsp;<%=cb.getdate()%></td>
                        <td class=texte7 align=left >&nbsp;<%=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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.16 17:01:05