Pregunta Error en la entrada JSF al error de doble conversión


Tengo una aplicación JSF2 que usa Spring 3.0. Tengo un bean que tiene una propiedad de tipo List<Double> con 5 elementos:

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 trato de obtener un miembro de la lista de matriz, porque por definición es genérico y el tipo genérico es Double. BigDecimal No puede ser enviado 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 intenté lo siguiente:

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

pero causó una excepción:

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

Debo admitir que soy nuevo en la tecnología JSF, pero en cuanto a esta El artículo se refiere, no había necesidad de anular nada. Cualquier ayuda será apreciada


5
2017-10-31 15:42


origen


Respuestas:


los <f:converter> no tiene una id atributo, en cambio es converterId. Ver también el documentación de la etiqueta. Entonces, 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" />

13
2017-10-31 16:14