2012-06-28 14 views

risposta

3

Questo semplicemente è la standard behavior di java.text.NumberFormat usati per <f:convertNumber>: Si finiture tutte le voci dopo il primo carattere non-allowed (ad esempio lettere o separatori decimali diversi da quelli definiti nel locale di ingresso). La conversione fallisce solo se il personaggio incriminato è all'inizio.

Non mi piace molto questo comportamento perché un utente potrebbe non notare che il suo valore errato è stato tagliato, causando una correzione automatica non intenzionale e (anche peggiore) in un valore errato.

Abbastanza interessante, i convertitori numerici specifici si comportano in modo diverso. L'utilizzo di <f:converter converterId="javax.faces.Double" /> non gestisce automaticamente l'input non numerico, ma non ha esito positivo sulla conversione. Tuttavia, il tag non possiede gli attributi aggiuntivi di convertNumber, come minFractionDigits o simboli di valuta.

Un approccio diverso sarebbe quello di scrivere il proprio convertitore personalizzato che si estende il convertitore standard, come descritto in this answer. È quindi possibile controllare il valore per i caratteri e interrompere immediatamente l'ulteriore elaborazione (generando un'eccezione di conversione appropriata) se ne trova uno. Se il valore è già privo di caratteri, è possibile chiamare il comportamento standard del convertitore da cui si ottiene.

Lo svantaggio di entrambi i modi è che perdi le funzionalità aggiuntive di convertNumber. Non hai attributi come minFractionDigits o currencySymbol su <f:converter>, quindi se hai bisogno di questo dovresti trovare un altro modo per passare un parametro. La nostra implementazione non richiede nessuno di questi, quindi non ho esaminato ulteriormente questo aspetto (siamo andati per l'approccio A), ma this answer presenta un approccio per farlo.

Problemi correlati