2010-02-16 14 views
6

Estoy utilizando JSF 1.2 con IceFaces 1.8 en un proyecto aquí.Conversión flotante JSF

Tengo una página que es básicamente una gran cuadrícula de edición para un montón de campos de números flotantes. Esto se implementa con inputText campos de la página apuntando a un objeto de valor con primitivas float tipos

ahora, como un nuevo requisito ve algunos de los campos de ser anulable, quería cambiar el objeto de valor a utilizar Float objetos más que primitiva tipos. No pensé que tendría que hacer nada en la página para acomodar esto.

Sin embargo, cuando hago el cambio me sale el siguiente error:

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

Y

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

La página tiene el siguiente aspecto:

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

también he intentado ¡agregando en <f:convert convertId="javax.faces.Float" /> allí también pero eso no parece funcionar tampoco! Tampoco cambia el tipo de objeto de valor a Double.

Estoy seguro de que me estoy perdiendo algo realmente simple, pero he estado mirando esto desde hace un tiempo y ¡no hay respuestas obvias inmediatamente!

+0

No se puede reproducir esto con Mojarra 2.0.2 en Tomcat 6.0.20 (sin IceFaces). ¿Puedes por favor publicar la stacktrace completa? – BalusC

+0

@BalusC Lamentablemente, no tengo acceso al seguimiento completo de la pila, el error se genera dentro de JSF y no tengo acceso a él. Pero estoy trabajando en algo más de información, tengan paciencia conmigo por un minuto ... –

+0

¿Solo obtenerlo de los registros del servidor? – BalusC

Respuesta

4

Después de un poco de investigación (ver por ejemplo here, here y here) que <f:convertNumber> es el problema. Parece que el número al que se convierte depende de la entrada que le dé, podría ser un número entero o un número de coma flotante. En otras palabras, no mira el tipo de destino, solo genera una instancia de java.lang.Number. Lo cual no es ideal, aunque no puedo determinar si esto se debe a que en alguna parte estoy usando una versión anterior de JSF o EL o algo así.

Parece que hay tres soluciones:

  1. Uso java.lang.Number como valor de tipo de objeto;
  2. Escribe tu propio convertidor;
  3. No utilice <f:convertNumber>.

Desafortunadamente, el # 1 no es una opción para mí por otros motivos, y no quiero escribir mi propio convertidor por el momento. Sin embargo, si cambio el código para eliminar el convertNumber, todo parece funcionar bien. (También he actualizado el tipo de objeto de valor a Double que se sugirió en uno de los enlaces que miré).

Eso evita las excepciones, y parece que JSF sigue haciendo lo que yo quiero que haga. Es molesto que parezca que no puede especificar convertNumber y el tipo de conversión en la misma instancia.

+0

el convertidor de número, en myfaces al menos usa 'DecimalFormat' para analizar el valor, así que esa es la forma ideal. – Bozho

Cuestiones relacionadas