首页 新闻 搜索 专区 学院

jsp:关于java.lang.NumberFormatException: null问题

0
悬赏园豆:80 [已关闭问题] 关闭于 2018-02-06 09:53
  <body>
  <%    request.setCharacterEncoding("utf-8");
        AssetName art=new AssetName();
        art.setAsId(Integer.parseInt(request.getParameter("eid")));
        art.setUID(request.getParameter("UID"));
        art.setAsnu(request.getParameter("asnu"));
        art.setAsnm(request.getParameter("asnm"));
        art.setAste(request.getParameter("aste"));
        art.setSpec(request.getParameter("spec"));
        IAsset ad=new AssetDao();
        if(ad.update(art)>0) 
            response.sendRedirect("Home.jsp");
            else{
                out.println("<script>alert('修改失败');location='Edit.jsp' </script>");
            }
        %>
  </body>

上面这份是修改控制,

String eid = request.getParameter("eid");

                if (eid == null) 
                     response.sendRedirect("Home.jsp");
               else {
                         IAsset ad=new AssetDao();
                      AssetName art=ad.getInfo(Integer.parseInt(eid));

上面这份是从修改页,Home.jsp中传入的

我是知道这里的eid应该是传到了Null,但是debug显示在没有执行这一行之前是有显示到eid=32,也就是在修改的页面传了过来才对。

art.setAsId(Integer.parseInt(request.getParameter("eid")));

这里给出的报错是以下,

复制代码
java.lang.NumberFormatException: null
    at java.lang.Integer.parseInt(Unknown Source)
    at java.lang.Integer.parseInt(Unknown Source)
    at org.apache.jsp.EditControl_jsp._jspService(EditControl_jsp.java:105)
    at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:731)
    at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:439)
    at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:395)
    at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:339)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:731)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:303)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
    at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:219)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:110)
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:506)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:169)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:103)
    at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:962)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:116)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:445)
    at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1115)
    at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:637)
    at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:318)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
    at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
    at java.lang.Thread.run(Unknown Source)
复制代码

个人技术有限,不知道要怎么改,折腾了好多天一直传不到这个值也是醉了,对了,删除倒是可以直接传过去,没有影响,会不会是dao写错了?

补充,由按钮触发获得eid,且能够在Edit.jsp中获得,只是在执行控制的时候Debug返回了java.lang.NumberFormatException: null 相关错误,而且debug过程中,执行art.setAsId前是能获得eid的值。

 onclick="location.href='Edit.jsp?eid=<%=art.getAsId()%>'"
jsp
AzusaMed的主页 AzusaMed | 初学一级 | 园豆:130
提问于:2018-01-29 10:25
< >
分享
所有回答(3)
0

你的String eid值是什么?打印到控制台看看。

ckx0709 | 园豆:392 (菜鸟二级) | 2018-01-29 12:21

这里我刚刚试了一下没有问题,打印出页面都没有问题,能输出且正确

支持(0) 反对(0) AzusaMed | 园豆:130 (初学一级) | 2018-01-29 14:12

@AzusaMed: 这里应该是个bug。如果时好时坏,eid这个参数你后台最好控制下,或者用一个只能输入数字的控件,或者对控件进行校验然后再传后台,不然,出过来的是字符串的话,你这个错就会再报。

支持(0) 反对(0) ckx0709 | 园豆:392 (菜鸟二级) | 2018-01-29 14:16

@ckx0709: 不是 他对应数据库的值就是Id,所以我在修改控制里用了转换。我上面已经做了判断获得不了这个值的时候返回页面,应该不会是值的问题。

//<%=art.getAsId()%>

支持(0) 反对(0) AzusaMed | 园豆:130 (初学一级) | 2018-01-29 14:20
0

通过getParameter获取到的东西不是在地址栏?后面的吗?像这样
Home.jsp?eid=xxx

流年飞雨 | 园豆:1983 (小虾三级) | 2018-01-31 14:49

是的,对应的是上边代码 eid=<%=art.getAsId()%>我已经写在上面了,这一部分是已经确认获取到,在执行art.setAsId时,request.getParameter("eid")里面的eid为null,所以转成Int的时候报Null。我是想问为什么在成功传入后执行时仍然报Null。

支持(0) 反对(0) AzusaMed | 园豆:130 (初学一级) | 2018-01-31 15:43

@AzusaMed:错误中
at java.lang.Integer.parseInt(Unknown Source)
at java.lang.Integer.parseInt(Unknown Source)
打了两遍,能到下面就说明eid不为空,你dao里是不是也parseInt了,你再debug一下,到这行
AssetName art=ad.getInfo(Integer.parseInt(eid));
先看一下Integer.parseInt(eid)结果,再看一下ad.getInfo(Integer.parseInt(eid))的结果,感觉应该第一个正常第一个有问题,然后进getInfo方法里看哪里有问题

支持(0) 反对(0) 流年飞雨 | 园豆:1983 (小虾三级) | 2018-01-31 23:59

@一座城你说你不懂: 刚刚Debug完,确定是在AssetName art=new AssetName(); 和art.setAsId(Integer.parseInt(request.getParameter("eid")));中发生问题,运行到art时AsId的值一直是0,然后导致数据库的值不能搜出来Update。但是依然不知道是从哪里开始传进来的0,因为这之前的eid一直存在。而且也还是在这一些语句执行之前确定是eid=XX正确。

支持(0) 反对(0) AzusaMed | 园豆:130 (初学一级) | 2018-02-01 14:42

@AzusaMed: 0是默认值吧,你不传值给他int或long型不就是0吗。 你贴的几个代码也搞不清前后,不知道你说的几个页面和后台的逻辑是怎么样的

支持(0) 反对(0) 流年飞雨 | 园豆:1983 (小虾三级) | 2018-02-01 15:36

你说之前eid一直存在,你是怎么确定的,在执行
art.setAsId(Integer.parseInt(request.getParameter("eid")));
之前自己执行request.getParameter("eid")查看的吗?

支持(0) 反对(0) 流年飞雨 | 园豆:1983 (小虾三级) | 2018-02-01 15:38

@一座城你说你不懂: 在debug时可以看得到,eid的项里有值,所以可以确定是存在的。这个执行顺序是,Edit.jsp页面是修改页面,用EditContrl.jsp执行写入数据库,在Edit.jsp里form.action使用了EditContrl;我一直想问的就是这个问题,明明我在删除的操作用的是同样的方法,但是在修改里加入eid=1,这个1不能再EditContrl.jsp中使用,就算是写1,它也不能执行报的错还是一样的,Debug时在执行语句之前可以Into能看到eid有值。

支持(0) 反对(0) AzusaMed | 园豆:130 (初学一级) | 2018-02-01 17:10
0

重新设置了控制页专门DEBUG,这次终结一下,EDIT.JSP里没有把传过去值的标签里name=id;之前传过去的是另一个测试值。

AzusaMed | 园豆:130 (初学一级) | 2018-02-06 09:53
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册