0

私が知っている単純な問題ですが、何が悪いのかわかりません。次のコードがあります。

String dxorderId = request.getParameter("orderid");
    long orderid = Long.parseLong((dxorderId));

PL/SQLプロシージャから呼び出されるサーブレット内にあります。dxorderid の値は、呼び出されたページの URL のパラメーターから取得されます。そのため、文字列として扱われるようです。そのため、文字列を long に変換する必要があります。ただし、上記のコードを使用すると、次のエラーが発生します。

14-Nov-2013 13:07:41 org.apache.catalina.core.StandardWrapperValve invoke
SEVERE: Servlet.service() for servlet [com.zf.proceed.service.servlets.ViewOrderServlet] in context with path [/webapp] threw exception
java.lang.NumberFormatException: null
at java.lang.Long.parseLong(Long.java:372)
at java.lang.Long.parseLong(Long.java:461)
at com.zf.proceed.service.servlets.ViewOrderServlet.doRequest(ViewOrderServlet.java:28)
at com.zf.proceed.service.servlets.ProceedBaseServlet.doRequest(ProceedBaseServlet.java:106)
at com.zf.proceed.service.servlets.ProceedBaseServlet.doGet(ProceedBaseServlet.java:39)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:621)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:728)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:222)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:123)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:502)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:171)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:99)
at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:953)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:408)
at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1023)
at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:589)
at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:310)
at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
at java.lang.Thread.run(Thread.java:619)

解析できないことを意味することは知っていますが、解析できない理由はわかりません。入力される値は 1454 です。

4

7 に答える 7

3

残念ながら値は ではありません1454null次の行からわかるように、値は です。

java.lang.NumberFormatException: null

パラメータ名を確認し、大文字と小文字や非表示の文字を含めて正しいことを確認する必要があります。

于 2013-11-14T12:13:39.347 に答える
3
java.lang.NumberFormatException: null  

StringdxorderId が null の場合、NumberFormatException がスローされます

解決

チェックdxorderIdnullありませんempty string

if(dxorderId != null && !dxorderId.equals(""))
{
  long orderid = Long.parseLong((dxorderId));
}  

オラクルのドキュメントからNumberFormatException

public class NumberFormatException
       extends IllegalArgumentException

アプリケーションが文字列をいずれかの数値型に変換しようとしたが、文字列の形式が適切でないことを示すためにスローされます。

于 2013-11-14T12:15:00.147 に答える
1

Apache の NumberUtils のcreateLongまたはtoLongメソッドを使用します。

于 2013-11-14T12:15:39.917 に答える
0

エラーはこの行によるものです。

String dxorderId = request.getParameter("orderid");

パラメータ名「orderid」が正しいかどうかを確認するか、その値がnullでないことを確認してください

于 2013-11-14T12:26:42.783 に答える
0

例外をよく見てください:java.lang.NumberFormatException: null

上記のステートメントは、値 fordxorderIdが null であることを示しています。問題はこの行にあります:

String dxorderId = request.getParameter("orderid");
于 2013-11-14T12:14:56.357 に答える
0

aは、指定された Data が -Value を表していないためNumberFormatException、 a に変換できないことを意味します。そのため、問題は Java Long-Parser ではなく、String のソースにあります。LongLong

あなたの特定のケースでは、パーサーは、指定された値がだったと述べているnullので、request.getParameter("orderid");戻り値はnull.

于 2013-11-14T12:14:59.730 に答える
0

java.lang.NumberFormatException: null

例外情報から、dxorderidnull であることがわかりますjava.lang.NumberFormatException

データを解析する前に、解析する値がnullかを最初に確認する必要があり ます。

于 2013-11-14T12:18:22.963 に答える