2012-05-28 19 views
7

Im tener este error cada vez que entro en una cadena vacía en el cuadro de texto y tratar de guardarlo Im tener este error:no pudo convertir valor de la propiedad del tipo java.lang.String al tipo requerido doble

Failed to convert property value of type java.lang.String to 
    required type double for property customerAcctSetting.maxAllowableAmount; 
nested exception is java.lang.IllegalArgumentException: Cannot convert value of 
    type [java.lang.String] to required type [double] for 
    property maxAllowableAmount: 
PropertyEditor [bp.ar.util.NumberFormatUtil$CustomerDoubleEditor] returned 
    inappropriate value 

Pero cuando entro en un formato de número no válido, como "DDD" tengo este error:

Failed to convert property value of type java.lang.String to required 
    type double for property customerAcctSetting.maxAllowableAmount; 
nested exception is java.lang.NumberFormatException: For input string: "ddd" 

tengo esta carpeta en mi controlador:

@InitBinder 
public void initBinder(WebDataBinder binder) { 
    NumberFormatUtil.registerDoubleFormat(binder); 
} 

y tengo una clase NumberFormatUtil.java que implementa la función estática registerDoubleFormat(binder):

NumberFormatUtil.java

public static void registerDoubleFormat (WebDataBinder binder) { 
    binder.registerCustomEditor(Double.TYPE, new CustomerDoubleEditor()); 
} 

private static class CustomerDoubleEditor extends PropertyEditorSupport{  
    public String getAsText() { 
     Double d = (Double) getValue(); 
     return d.toString(); 
    } 

    public void setAsText(String str) { 
     if(str == "" || str == null) 
      setValue(0); 
     else 
      setValue(Double.parseDouble(str)); 
    } 
} 

Im utilizando Spring 3.0.1. Soy muy nuevo en Java y otras tecnologías relacionadas, como la primavera. Por favor ayuda. Gracias por adelantado.

+0

¿Cuál es la respuesta? Los foros de Reading Spring parece que esto debería funcionar. Obtengo un "Error al convertir el valor de la propiedad de tipo [java.lang.Double] al tipo requerido [java.lang.Double] para la propiedad ..." que me aturde. –

Respuesta

4

No sé si esta es la causa de su problema, pero str == "" es un error.

Si está probando para ver si una Cadena está vacía, use str.isEmpty() o str.length() == 0 o incluso "".equals(str).

El operador == prueba para ver si las dos cadenas son el mismo objeto. Esto no hace lo que quiere, porque puede haber muchas instancias de cadena diferentes en la aplicación en ejecución que representan la misma cadena. La cadena vacía no es diferente a otras cadenas a este respecto.


Incluso si esto no es la causa de su problema, debe corregir este error, y crea una nota mental para no utilizar == a probar cadenas. (O al menos, no a menos que haya tomado medidas especiales para garantizar que siempre va a trabajar ... que está más allá del alcance de este Q & A.)

+0

Lo intenté y no funcionó. Tal vez el problema esté en otro lado. Estoy haciendo mi mejor esfuerzo para resolverlo. Gracias por la sugerencia de todos modos. – NinjaBoy

5

Cambiar la setAsText() método le gusta aquí,

public void setAsText(String str) { 
     if(str == null || str.trim().equals("")) { 
      setValue(0d); // you want to return double 
     } else { 
      setValue(Double.parseDouble(str)); 
     } 
    } 
+0

debe verificar si es nulo primero –

+0

gracias su consejo Boris, así que lo edité. –

4

en cuanto a la cadena vacía, supongo que el problema es que su es fundido a entero, no doble lo que tiene que utilizar postfix d: 0.0d;

En cuanto a NumberFormatException, no veo ningún problema que el convertidor no pueda convertir. Si usted quiere tener un mensaje personalizado de errores convertion se debería poner ese mensaje en el archivo de propiedades del mensaje siguiendo la semántica de DefaultMessageCodeResolver Creo que va a ser algo así como typeMismatch.java.lang.Double = "invalid floating point number" y tienen una fuente de mensajes en la configuración de frijol

<bean id="messageSource" 
    class="org.springframework.context.support.ResourceBundleMessageSource"> 
    <property name="basenames"> 
     <list> 
      <value>exceptions</value><!--- that means you have exceptions.properties in your class path with the typeMismatch string specified above--> 
     </list> 
    </property> 
    </bean> 

También el concepto de Property Editors está desactualizado, el new API with converters es el camino a seguir, porque Spring no crea un montón de objetos auxiliares (editores de propiedades) para ninguna propiedad que se edite con este enfoque.

Cuestiones relacionadas