Исключение нулевого указателя, когда в JSP нет значения для числового поля

Я использую компонент для проверки формы JSP. Если используется setProperty и некоторые поля в форме оставлены пустыми, возникает исключение с нулевым указателем. Это исключение происходит только в том случае, если поле является числами в компоненте. Я не могу выполнить проверку без вызова setProperty bean. Есть ли другой способ сделать это? Я использую следующий код.

<jsp:useBean id="addBean" scope="request" class="org.mypackage.products.add_product6_Variables" />
    <jsp:setProperty name="addBean" property="*" />

Моя ошибка:

org.apache.jasper.JasperException: An exception occurred processing JSP page /response.jsp at line 19

19: jsp:setProperty name="addBean" property="*" />

type Exception report

message 

description The server encountered an internal error () that prevented it from fulfilling this request.

exception 

org.apache.jasper.JasperException: org.apache.jasper.JasperException: org.apache.jasper.JasperException: error in invoking method
    org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:500)
    org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:410)
    org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:313)
    org.apache.jasper.servlet.JspServlet.service(JspServlet.java:260)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:717)


root cause 

org.apache.jasper.JasperException: org.apache.jasper.JasperException: error in invoking method
    org.apache.jasper.runtime.JspRuntimeLibrary.internalIntrospecthelper(JspRuntimeLibrary.java:361)
    org.apache.jasper.runtime.JspRuntimeLibrary.introspecthelper(JspRuntimeLibrary.java:308)
    org.apache.jasper.runtime.JspRuntimeLibrary.introspect(JspRuntimeLibrary.java:286)
    org.apache.jsp.response_jsp._jspService(response_jsp.java:77)
    org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
    org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:386)
    org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:313)
    org.apache.jasper.servlet.JspServlet.service(JspServlet.java:260)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:717)


root cause 

org.apache.jasper.JasperException: error in invoking method
    org.apache.jasper.runtime.JspRuntimeLibrary.createTypedArray(JspRuntimeLibrary.java:533)
    org.apache.jasper.runtime.JspRuntimeLibrary.internalIntrospecthelper(JspRuntimeLibrary.java:350)
    org.apache.jasper.runtime.JspRuntimeLibrary.introspecthelper(JspRuntimeLibrary.java:308)
    org.apache.jasper.runtime.JspRuntimeLibrary.introspect(JspRuntimeLibrary.java:286)
    org.apache.jsp.response_jsp._jspService(response_jsp.java:77)
    org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
    org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:386)
    org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:313)
    org.apache.jasper.servlet.JspServlet.service(JspServlet.java:260)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:717)


root cause 

java.lang.NumberFormatException: empty String
    sun.misc.FloatingDecimal.readJavaFormatString(FloatingDecimal.java:994)
    java.lang.Float.valueOf(Float.java:388)
    org.apache.jasper.runtime.JspRuntimeLibrary.createTypedArray(JspRuntimeLibrary.java:516)
    org.apache.jasper.runtime.JspRuntimeLibrary.internalIntrospecthelper(JspRuntimeLibrary.java:350)
    org.apache.jasper.runtime.JspRuntimeLibrary.introspecthelper(JspRuntimeLibrary.java:308)
    org.apache.jasper.runtime.JspRuntimeLibrary.introspect(JspRuntimeLibrary.java:286)
    org.apache.jsp.response_jsp._jspService(response_jsp.java:77)
    org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
    org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:386)
    org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:313)
    org.apache.jasper.servlet.JspServlet.service(JspServlet.java:260)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:717)



person Deepak    schedule 10.07.2011    source источник


Ответы (1)


Является ли ваш тип свойства bean-компонента примитивным числом или типом обернутого объекта? Я имею в виду int или Integer?

Вероятно, теперь он имеет тип int, поскольку int и другие примитивы не могут иметь значение null; в то время как объект Integer может иметь значение null.

Можете ли вы изменить тип свойства bean-компонента на Integer и т. Д. И проверить, существует ли еще NPE?

person Basanth Roy    schedule 10.07.2011
comment
Я действительно не понимаю термин "примитивное число" или тип объекта-оболочки. можешь сказать мне, что это такое ?? а мое числовое поле имеет тип с плавающей запятой. - person Deepak; 10.07.2011
comment
См. download.oracle.com/javase/tutorial/java/data/ и en.wikipedia.org/wiki/Primitive_wrapper_class Итак, если ваш код bean-компонента был общедоступным void setFloatProperty (ввод с плавающей запятой) {...} измените его на public void setFloatProperty (ввод с плавающей запятой) {...}. Обратите внимание на заглавную букву F в Float. - person Basanth Roy; 10.07.2011
comment
Можете ли вы запустить отладчик и поставить точку останова в строке, где вы получаете NPE? Проверьте, что передается. Также поместите строку, вызывающую NPE, в окно «Watch» вашего отладчика. - person Basanth Roy; 10.07.2011
comment
я проверяю это сейчас .. вернусь через мгновение - person Deepak; 10.07.2011
comment
Хм, я предполагал, что класс Float сможет обрабатывать пустые строки. В крайнем случае, вы можете изменить тип свойства bean-компонента на String вместо Float. И в ваших методах проверки bean-компонентов вы можете сначала проверить, пуста ли строка или нет, прежде чем преобразовывать ее в число. - person Basanth Roy; 10.07.2011
comment
это лучший способ сделать это? - person Deepak; 10.07.2011