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

JSP代码使用jsp:setProperty标签时报空值错误是什么原因?

报错原因
  • 首次访问JSP页面时表单未提交,request.getParameter("num1Text")、request.getParameter("num2Text")返回值为null,直接传入Integer.parseInt()方法会触发java.lang.NumberFormatException: null异常,和你报错日志里的触发位置完全匹配。
  • 你移除jsp:setProperty代码后运行正常,是因为跳过了对null值的强制转换操作;后续加回代码刷新页面可正常运行,是因为此时你已经提交过一次表单,请求中携带了两个输入框的参数,不会再拿到null值。
  • 你给输入框设置的前端默认值仅在页面渲染完成后显示,不会自动带入首次访问的请求参数中,因此无法解决该问题。
修复方案

方案1:参数为空时赋值默认值

直接修改jsp:setProperty中value的取值逻辑,参数为空时默认给0:

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
pageEncoding="ISO-8859-1"%>
<%@ page import="beans.JavaBean"%>
<!DOCTYPE html>
<html>
  <head>
    <meta charset="ISO-8859-1">
    <title>Sum</title>
  </head>
  <body>
    <form action="InterestingFile.jsp">
      <jsp:useBean id="SumNumber" class="beans.JavaBean" />
      <label>Number 1: </label>
      <input type="text" name="num1Text">
      <jsp:setProperty name="SumNumber" property="num1" value='<%= request.getParameter("num1Text") == null ? 0 : Integer.parseInt(request.getParameter("num1Text")) %>' />
      <label>Number 2: </label>
      <input type="text" name="num2Text">
      <jsp:setProperty name="SumNumber" property="num2" value='<%= request.getParameter("num2Text") == null ? 0 : Integer.parseInt(request.getParameter("num2Text")) %>' />
      <input type="submit" value="Submit"/>
      <input type="reset" value="Reset"/>
      <jsp:setProperty name="SumNumber" property="sum" value="0" />
    </form>
    <jsp:setProperty name="SumNumber" property="sum" value='<%= (request.getParameter("num1Text") == null || request.getParameter("num2Text") == null) ? 0 : Integer.parseInt(request.getParameter("num1Text")) + Integer.parseInt(request.getParameter("num2Text")) %>' />
    <p>Result: <jsp:getProperty name="SumNumber" property="sum" /></p>
  </body>
</html>

方案2:仅表单提交后执行参数解析

给提交按钮添加name标识,判断只有用户点击提交按钮后才执行参数解析和求和逻辑,更符合常规业务逻辑:
首先修改提交按钮代码:

<input type="submit" name="submitBtn" value="Submit"/>

然后把参数解析、求和的jsp:setProperty逻辑套入判断:

<% if(request.getParameter("submitBtn") != null){ %>
    <jsp:setProperty name="SumNumber" property="num1" value='<%= Integer.parseInt(request.getParameter("num1Text")) %>' />
    <jsp:setProperty name="SumNumber" property="num2" value='<%= Integer.parseInt(request.getParameter("num2Text")) %>' />
    <jsp:setProperty name="SumNumber" property="sum" value='<%= Integer.parseInt(request.getParameter("num1Text")) + Integer.parseInt(request.getParameter("num2Text")) %>' />
<% } %>

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 11:24:08