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

Servlet doPost抛出java.lang.NumberFormatException: null问题求助

问题原因

你遇到的报错根本原因是POST请求没有携带id参数:

  • 你点击编辑链接进入editVaccine页面时,id是作为GET请求的查询参数传递的,但是你在doGet方法生成的编辑表单里,没有把这个id值包含在提交的内容里,所以POST请求发出去的时候没有id参数,request.getParameter("id")返回null,转Integer就抛出了NumberFormatException。
  • 除此之外你的代码还有几个隐藏错误,后续也会导致运行异常,也需要同步修复。

修复步骤

1. 编辑表单添加id隐藏域

在editVaccine的doGet方法生成的form表单内,添加一个隐藏的input控件存储id值,这样POST提交时就能把id带过去:

// 放在form标签的下一行即可
html.append("<form action='editVaccine' method='post'>" );
html.append("<input type='hidden' name='id' value='" + id + "'/>");
// 后面原有代码保持不变

2. 修正下拉选择框的错误

你当前的select控件写法有两个问题:

  • select的name属性是DosesReq,但你在doPost里取参数的时候用的是dosage,永远取不到值
  • 每个option都重复设置了value属性,不会自动匹配当前疫苗的剂量数,需要根据当前值设置selected属性
    修改后的下拉框代码参考:
html.append("<tr><th colspan='2'>Doses Required</th>" + "<td><select name='dosage'>");
String curDose = entry.getDosesReq();
html.append("<option value='1' " + ("1".equals(curDose)?"selected":"") + ">1</option>");
html.append("<option value='2' " + ("2".equals(curDose)?"selected":"") + ">2</option>");
html.append("<option value='3' " + ("3".equals(curDose)?"selected":"") + ">3</option>");
html.append("</select></td>");

3. 修正ServletContext取值的key错误

你在ListVaccine的init方法里,把疫苗列表存在了key为ServletFunctions.VaccineEntries的属性里,但是editVaccine的getEntry方法里取的是"entries",这里key不一致会导致取到null,后续报空指针。修改getEntry里的取值代码:

List<VaccineEntry> entries = (List<VaccineEntry>) getServletContext()
    .getAttribute(ServletFunctions.VaccineEntries);

可选替代方案

你也可以选择把id加到form的action地址里,效果和隐藏域一致:

html.append("<form action='editVaccine?id=" + id + "' method='post'>" );

内容的提问来源于stack exchange,提问作者jb1145

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 03:45:03