表单双提交按钮异常:Save正常Save as Draft无数据传至Servlet
解决表单提交至Draft Servlet时无法获取参数的问题
我来帮你排查这个问题,看起来是Save as Draft按钮的提交逻辑出了点小问题,以下是几个可能的原因和对应的解决方案:
1. 检查Draft Servlet是否处理POST请求
你的表单使用的是method="post",所以InsertAsDraft Servlet必须在doPost方法中处理请求,而不是doGet。如果你的参数获取代码写在doGet里,那肯定拿不到POST请求的参数。
修正后的Servlet示例:
public class InsertAsDraft extends HttpServlet { @Override protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // 在这里获取表单参数 String outlet = request.getParameter("outlet"); String categoryCode = request.getParameter("categoryCode"); System.out.println("outlet in draft: " + outlet); // 你的草稿保存逻辑... } // 可选:如果需要支持GET请求,也可以把逻辑复用 @Override protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doPost(request, response); } }
2. 验证Servlet映射的正确性
确认web.xml或注解中的Servlet映射是否正确,比如InsertAsDraft的URL路径有没有拼写错误(大小写敏感!)。如果路径写错了,请求可能被路由到错误的地方,自然拿不到参数。
3. 用浏览器开发者工具检查请求数据
点击Save as Draft按钮后,打开浏览器的开发者工具(F12),切换到Network标签:
- 找到对应的POST请求(目标是
InsertAsDraft) - 查看请求的Form Data部分,确认
outlet和categoryCode参数是否存在- 如果参数存在:问题出在后端Servlet的处理逻辑
- 如果参数不存在:检查表单元素是否有
disabled属性(你的代码里没有,但可以确认下),或者是否有JS阻止了表单数据的提交
4. 替代方案:用JS动态修改表单Action
如果formaction属性存在兼容性问题(虽然现代浏览器都支持),可以改用JavaScript动态修改表单的action属性后提交:
修改前端按钮代码:
把按钮的type改为button,避免默认提交,然后添加点击事件:
<button type="button" id="saveDraft" class="commonButton" onclick="submitAsDraft()"> <i class="fas fa-save"></i> Save as draft </button>
添加JavaScript函数:
function submitAsDraft() { const form = document.getElementById('indentForm'); // 修改表单的提交目标 form.action = 'InsertAsDraft'; // 手动提交表单 form.submit(); }
这样修改后,点击Save as Draft按钮时,会先把表单的提交地址改成InsertAsDraft,再提交表单,就能正常传递参数了。
内容的提问来源于stack exchange,提问作者user10561216
相关产品推荐
相关产品推荐

