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
相关产品推荐
相关产品推荐

