2011-10-31 28 views
5

Tengo una aplicación JSF2 que usa Spring 3.0. Tengo un grano que tiene una propiedad de tipo List<Double> con 5 elementos:Error en la entrada JSF Error de conversión doble

public class MyBean { 
    private List<Double> values; 
    public List<Double> getValues() { 
     if (values == null) { 
      values = new ArrayList<Double>(5); 
       for (int i = 0; i < 5; i++) { 
        values.add(null); 
       } 
     } 
     return values; 
    } 
    public void setValues(List<Double> values) { 
     this.values = values; 
    } 
} 

En mi archivo XHTML tengo esto para cada elemento:

<h:inputText id="value1" value="#{myBean.values[0]}"> 
    <f:convertNumber pattern="#########0.##" /> 
</h:inputText> 

Mi propósito es recuperar los valores como ArrayList. Además, no quiero mantener propiedades individuales para cada miembro. Un requisito futuro hará que el número total del valor sea dinámico (no el 5 codificado), así que puedo usar un ciclo para definir las entradas para cada elemento, pero no nos enfoquemos ahora en esto.

Así que aquí está el problema. Cuando envío la página, la conversión no es correcta. Por ejemplo, si mi entrada fue 1, 2.0, 3 (y 2 entradas vacías para los dos últimos elementos, no son obligatorias), estoy recibiendo la siguiente matriz [1, "2.0", 3, "", ""] , donde 1 y 3 son de tipo BigDecimal, y 2.0 y los últimos 2 miembros son cadenas vacías. Esto causa ClassCastexception cada vez que intento obtener un miembro de la lista de matriz, porque por definición es genérico y el tipo genérico es Double. BigDecimal no se puede convertir a Double; es obvio que los intentos de lanzamiento de hilo también fallarán. Ahora, esperaba que al menos todos los miembros sean convertidos por el convertidor y sean del mismo tipo. Además, necesito una forma de obtener correctamente como Doble. También probé el siguiente:

<h:inputText id="value1" value="#{myBean.values[0]}"> 
    <f:converter id="javax.faces.Double" /> 
</h:inputText> 

pero provocó una excepción:

<f:converter> Default behavior invoked of requiring a converter-id passed in the constructor, must override ConvertHandler(ConverterConfig)

Tengo que admitir que soy nuevo en la tecnología JSF, pero en lo que se refiere a this artículo, no había no hay necesidad de anular nada Cualquier ayuda será apreciada

Respuesta

13

La <f:converter> no tiene un atributo id, sino que es converterId. Vea también el tag documentation. Por lo tanto, esto debería hacer:

<h:inputText id="value1" value="#{myBean.values[0]}"> 
    <f:converter converterId="javax.faces.Double" /> 
</h:inputText> 

o incluso

<h:inputText id="value1" value="#{myBean.values[0]}" converter="javax.faces.Double" /> 
+0

sí, en efecto con 'convertedId' Lo tengo trabajo. Desafortunadamente, la URL que proporcioné anteriormente me indujo a error. Gracias por la rápida respuesta. –

Cuestiones relacionadas