共用一个Servlet提交参数到后台天坑(form和a标签)!

当我们很躲数据共有一个Servlet对象时要注意:
request对象有一定的作用范围(管理范围)
每个对象管理的范围一般是form管理的范围

  • 问题:用a标签提交Servlet的参数在Servlet中获取不到?a标签和form标签提交到后台的数据都相互访问不到?
  • 原因: form提交和a标签提交所设的request对象不是一个值 也就是说在form标签中
    request对象调用setAttribute();setParamter(); 对于a标签无效,在a标签中
    request对象调用setAttribute();setParamter(); 对于a标签和form标签中都访问不到
    因为form的equest对象和a标签的request对象不同

例如:

 <a href="<c:url value='/StudServlet?cmd=query'></c:url>">查看学生信息</a><hr/>
    <form action="<c:url value='/StudServlet?cmd=save'/>" method="post">
        姓名:<input type="text" name="name"/><br/>
        年龄:<input type="text" name="age"/><br/>
        <input type="button" onclick="addBook()" value="添加图书"><br/>
        <div id="div">

        </div><br/>
        <input type="submit" value="注册">

    </form>
        <a href="<c:url value='/StudServlet?cmd=abc'></c:url>">
        <input type="text" name="aa" value="aaaaaaaaaa"/><br/>
测试注解</a>
  </body>
  • 解释:

通过a标签的Stuservlet拿到request.getParameter(“name”);是为空的,因为是不同的request对象
而通过form提交的Stuservlet同样拿不到request.getParameter(“aa”),就连a标签提交的request.getParameter(“aa”)都是null值,自己都拿不到,所以这是要注意的地方。

  • 解决办法:

1.a标签改用form提交,自己设置自己的param;自己有自己的作用域
2.提升作用域,在页面中加入属性,并设置为session对象所有

<c:set var="st" property="st" value="22222" scope="session"></c:set>`
可以使用 JavaScript 来实现多个表单共用一个提交的功能。具体实现步骤如下: 1. 给每个表单添加一个 class 或 ID,用于标识不同的表单。 2. 给提交按钮添加一个点击事件,获取所有表单的数据,并进行提交。 3. 在点击事件中,使用 `document.querySelectorAll()` 方法获取所有表单元素,然后遍历每个表单,获取表单数据,并将数据拼接成一个对象。 4. 最后将获取到的数据对象使用 Ajax 或表单提交方式进行提交。 下面是一个简单的示例代码,供参考: HTML 代码: ```html <form class="form1"> <input type="text" name="username" /> <input type="password" name="password" /> </form> <form class="form2"> <input type="text" name="email" /> <input type="text" name="phone" /> </form> <button id="submitBtn">提交</button> ``` JavaScript 代码: ```js const submitBtn = document.querySelector('#submitBtn'); submitBtn.addEventListener('click', () => { const forms = document.querySelectorAll('form'); const data = {}; forms.forEach((form, index) => { const formData = new FormData(form); for (let [key, value] of formData.entries()) { data[`form${index + 1}_${key}`] = value; } }); // 使用 Ajax 或表单提交方式进行提交 // ... }); ``` 在上面的代码中,我们将表单数据拼接成了一个对象 `data`,并通过 `data` 对象来传递数据。在实际开发中,可以根据需求来选择使用 Ajax 或表单提交方式进行提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值