En Mi Local Funciona

Technical thoughts, stories and ideas

af:InputDate con doble formato

Publicado por Alejandro Font el

OracleOracle ADF

En este post trataremos de mostrar un enfoque poco habitual a un comportamiento no deseado del framework Oracle ADF en inputdates con doble formato en JDev 11gR1.

En uno de los clientes en los que participo nos encontramos con el siguiente comportamiento:

Un inputtext con dos validadores uno con fecha y otro con fecha y hora:

<af:inputDate label="Desde" id="id5" autoSubmit="true">  
   <af:convertDateTime pattern="dd.MM.yyyy HH:mm:ss" secondaryPattern="ddMMyyyy"/>    
</af:inputDate>  

Al poner solo la fecha, el cual es un formato válido y por tanto admitido, el componente aplica el formato del patrón principal.
Hasta aquí todo normal, el problema reside en que la hora que te aplica es un +1. Es decir si introducimos 21102015 nos formatea a 21.10.2015 01:00:00.

Llegados a este punto se puede debatir si es o no un bug. Hay algún que otro bug que podría estar relacionado con este tema y siempre tenemos la opción de abrir un SR en support.

Dicho esto, en nuestro caso estábamos en una aplicación que venía de una migración Oracle Forms, Forms en este caso ponía 00:00:00. Es decir, tenemos que darle al usuario como mínimo lo que ya tiene y siempre con el objetivo de mejorar su experiencia de usuario.

Como workaround para este problema se optó por crear un convertidor cliente a nivel de JavaScript, una posibilidad que generalmente no se suele usar mucho ya que se tiende siempre a crear convertidores propios en servidor vía JSF.

La idea es muy similar, se tiene también un getAsString y un getAsObject:

TrConverter.prototype.getAsString = function(value, label){}  
TrConverter.prototype.getAsObject = function(value, label){}  

Ademas podríamos basar nuestro convertidor en una propiedad o attribute del componente para solo aplicarlo en determinados inputdates.

Mas información sobre convertidores propios en la documentación oficial.

Nota: Este comportamiento se ha detectado en JDeveloper 11.1.1.7 (11gR1) pero afortunadamente en JDeveloper 12.2.1(12c) esta corregido y al aplicar el segundo patrón te aplica 21.10.2015 00:00:00.

Puedes ver más posts de En Mi Local Funciona sobre Oracle ADF aquí.