Chrome 36 rompe el componente rich:fileUpload

por | agosto 14, 2014

El componente de RichFaces rich:fileUpload en la rama de versiones 3.3.x simplemente dejó de funcionar en una actualización de las que nos tiene acostumbrados Chrome que en esa carrera de llenarnos de nuevas características compiten con tener el número de versión mas alto con Firefox. Fue hasta la versión 35 que este componente bastante usado en varios sistemas dejó de funcionar, es cierto que Richfaces ya está en la versión 4, no es menos cierto que varios sistemas todavía no han migrado o no piensa migrar(¿porqué migrar algo que funciona bien?), con la versión 36 de Chrome rompió el componente dejándolo inutilizado.

Componente fileUpload de RichFaces sin funcionar en Chrome 36

Componente fileUpload de RichFaces sin funcionar en Chrome 36

Fue para el mes de julio que en los foros de jboss este problema se daba a conocer. ¿Es un issue de RichFaces?, ¿es un issue de Chrome? En los comentarios se revela que usando el atributo noDuplicate=”true” el problema desaparece, este atributo define si se permite agregar archivos que ya fueron “subidos” por el componente.

Name Required Request-time Type Description
noDuplicate false false javax.el.ValueExpression
(must evaluate to boolean)
Defines if component should allow
to add files that were already in list.
Default value is "false"

También como indican en el foro, el Javascript generado por rich:fileUpload es mal manejado por Chrome, el usar el atributo noDuplicate=”true” origina que el atributo no clone su nodo, como se puede ver en el siguiente código.

var onchangeAttribute = $(elt).attr('onchange');
$(elt).attr('onchange', '');
var newUpload = elt.cloneNode(false);
$(newUpload).attr('onchange', onchangeAttribute);

Debido a esto se han creado dos incidentes en el registro de errores de Chrome:

Afortunadamente estos ya fueron solucionados en la versión 37, así que será cuestión de esperar que la magia ocurra y la actualización automática de Chrome arregle el desastre.

PD: Al parecer en alguna versión de Internet Explorer en Windows 8 también tiene el error. ¿Será que los de Redmond están copiando código de Chrome mientras su navegador web es software privativo?, si es así al menos que no copien los errores.

EOF