2011-10-31 18 views
5

Ho un'applicazione JSF2 che utilizza Spring 3.0. Ho un fagiolo che ha una proprietà di tipo List<Double> con 5 elementi:Ingresso JSF non riuscito a Errore di doppia conversione

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; 
    } 
} 

Nel mio file xhtml ho questo per ogni elemento:

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

Il mio scopo è quello di recuperare i valori come ArrayList. Inoltre, non voglio mantenere le singole proprietà per ogni membro. Un requisito futuro renderà dinamico il numero totale del valore (non il 5 codificato), quindi potrei usare un ciclo per definire gli input per ciascun elemento, ma non concentrarmi su questo ora.

Quindi ecco il problema. Quando invio la pagina, la conversione non è corretta. Ad esempio, se il mio input era 1, 2.0, 3 (e 2 input vuoti per gli ultimi due elementi, non sono obbligatori), sto ricevendo il seguente array [1, "2.0", 3, "", ""] , dove 1 e 3 sono di tipo BigDecimal e 2.0 e gli ultimi 2 membri sono stringhe vuote. Ciò causa ClassCastexception ogni volta che provo a ottenere un membro dell'elenco di matrici, perché per definizione è generico e il tipo generico è Double. BigDecimal non può essere trasmesso a Double; è ovvio che anche i tentativi di cast stringa falliranno. Ora, mi sarei aspettato che almeno tutti i membri venissero convertiti dal convertitore e fossero dello stesso tipo. Inoltre, ho bisogno di un modo per ottenere correttamente come Double. Ho anche provato il seguente:

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

ma ha causato un'eccezione:

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

devo ammettere io sono nuovo alla tecnologia JSF, ma per quanto riguarda this articolo è interessato, ci fu non c'è bisogno di scavalcare nulla. Qualsiasi aiuto sarà apprezzato

risposta

13

Il <f:converter> non ha un attributo id, invece è converterId. Vedi anche lo tag documentation. Quindi, questo dovrebbe fare:

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

o anche

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

sì, anzi con 'convertedId' ho capito di lavoro. Sfortunatamente sono stato fuorviato dall'URL che ho fornito sopra. Grazie per la risposta rapida. –

Problemi correlati