2010-02-16 18 views
6

Sto utilizzando JSF 1.2 con IceFaces 1.8 in un progetto qui.Conversione float JSF

Ho una pagina che è fondamentalmente una grande griglia di modifica per un intero gruppo di campi numerici a virgola mobile. Questo viene implementato con inputText campi della pagina che punta a un oggetto di valore con primitive float tipi

ora, come un nuovo requisito vede alcuni dei campi essere annullabile, volevo cambiare l'oggetto valore da utilizzare Float oggetti piuttosto che primitiva tipi. Non pensavo che avrei dovuto fare qualcosa per la pagina per accogliere questo.

Tuttavia, quando faccio il cambio ricevo il seguente errore:

/pages/page.xhtml @79,14 value="#{row.targetValue}": java.lang.IllegalArgumentException: argument type mismatch

E

/pages/page.xhtml @79,14 value="#{row.targetValue}": java.lang.IllegalArgumentException: [email protected]

La pagina si presenta così:

<ice:inputText value="#{row.targetValue}" size="4"> 
    <f:convertNumber pattern="###.#" /> 
</ice:inputText> 

Ho anche provato aggiungendo in <f:convert convertId="javax.faces.Float" /> in là pure ma quello non sembra funzionare neanche! Inoltre, non modifica i tipi di oggetto valore in Double.

Sono sicuro che probabilmente mi manca qualcosa di veramente semplice, ma sono stato a fissare questo per un po 'ora e nessuna risposta è immediatamente ovvia!

+0

Impossibile riprodurlo con Mojarra 2.0.2 su Tomcat 6.0.20 (senza IceFaces). Puoi per favore pubblicare lo stacktrace completo? – BalusC

+0

@BalusC Purtroppo non ho accesso alla traccia dello stack completo, l'errore viene generato all'interno di JSF e non ho accesso ad esso. Ma sto lavorando ad alcune informazioni in più, sopportare per un minuto ... –

+0

Basta prenderlo dai log del server? – BalusC

risposta

4

Dopo alcune indagini (vedere ad esempio here, here e here) il problema è il numero <f:convertNumber>. Sembra che il numero a cui converte dipende dall'input che gli viene dato, potrebbe essere un numero intero o un numero in virgola mobile. In altre parole, non analizza il tipo di destinazione: genera solo un'istanza di java.lang.Number. Che non è l'ideale, anche se non riesco a determinare se questo è perché da qualche parte sto usando una vecchia versione di JSF o EL o qualcosa del genere.

Sembra che ci siano tre soluzioni:

  1. Uso java.lang.Number come tipo di oggetto valore;
  2. Scrivi il tuo convertitore;
  3. Non utilizzare <f:convertNumber>.

Purtroppo il n. 1 non è un'opzione per me per altri motivi e al momento non desidero scrivere il mio convertitore. Tuttavia, se cambio il codice per rimuovere il numero convertito, tutto sembra funzionare correttamente. (Ho anche aggiornato il tipo di oggetto valore su Double che è stato suggerito in uno dei link che ho visto).

Ciò impedisce le eccezioni e sembra che JSF stia ancora facendo ciò che voglio che faccia. Solo fastidioso sembra che non sia possibile specificare convertNumber e il tipo di conversione nella stessa istanza.

+0

il convertitore di numeri, in myfaces utilizza almeno 'DecimalFormat' per analizzare il valore, quindi questo è il modo ideale. – Bozho

Problemi correlati