Estoy intentando crear un "TipoDocumento" ya sea en Combo o Enum, que en base al "TipoDocumento" que se elija me fije una longitud fija para el campo "documento". Por ejemplo, si elijo un "TipoDocumento" que sea DNI, que en el campo "documento" sea una longitud fija de 9 caracteres. El problema viene que por ejemplo un "Pasaporte" como "TipoDocumento" tiene que ser de longitud variable. Sino haría esto:
A nivel de base de datos tienes que tener una longitud fija, que será la del máximo posible. Entonces mapea la columna con una propiedad persistente y usa propiedades no persistentes (con getter y setter, pero sin atributo) para tener otros puntos de vista, Algo así;
No consigo dar con la solución, si que me muestra un combo con mis opciones (DNI, NIE, CIF, PASAPORTE) pero cuando me comprueba la longitud de los datos de campo "documento" me salta el error de longitud de DNI, NIE y CIF a la vez, sea del "TipoDocumento" que sea.
No se muy bien como relacionar la longitud de las 4 opciones en el campo "documento" con la opción seleccionada en "TipoDocumento". Te adjunto captura de lo que te comento de los errores y captura de 4 columnas que me crea en la lista sin yo nombrarlas, y antes no me las mostraba...
He probado con lo que me sugerias pero algo no estoy haciendo bien y no logro verlo
La solución que te propuse es a nivel visual, no tiene en cuenta las validaciones. Claro, las propiedades ocultas siguen existiendo y al grabar no se cumple su validación.
La segundo alternativa es quitar todos los @Lengh y poner un @PropertyValidator propio en documento o poner una validación a nivel de entidad en un método @PrePersist. Esta validación propia para la longitud tendría en cuenta el tipo de documento para validar de una forma u otra.
Mira más sobre las opciones validación: https://www.openxava.org/OpenXavaDoc/docs/validation-alternatives_es.html
Ayuda a otros en este foro como yo te ayudo a ti.
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
Buenos días,
Estas son mis clases TipoDocumento y Propietario:
Estoy intentando crear un "TipoDocumento" ya sea en Combo o Enum, que en base al "TipoDocumento" que se elija me fije una longitud fija para el campo "documento". Por ejemplo, si elijo un "TipoDocumento" que sea DNI, que en el campo "documento" sea una longitud fija de 9 caracteres. El problema viene que por ejemplo un "Pasaporte" como "TipoDocumento" tiene que ser de longitud variable. Sino haría esto:
Pero en el caso de que se elija "Pasaporte" quiero que no haya longitud fija, y no se como plasmarlo.
He revisado la documentación pero no se si hay alguna funcionalidad que me pueda ayudar o como debería proceder.
Muchas gracias de antemano!
Last edit: Manu 2024-02-21
Hola Manu:
A nivel de base de datos tienes que tener una longitud fija, que será la del máximo posible. Entonces mapea la columna con una propiedad persistente y usa propiedades no persistentes (con getter y setter, pero sin atributo) para tener otros puntos de vista, Algo así;
En @View pon dni y pasaporte. Después en la acción @OnChange de tipoDocumento usa getView().setHidden() para mostrar una u otra.
Ayuda a otros en este foro como yo te ayudo a ti.
Buenos días Javier,
No consigo dar con la solución, si que me muestra un combo con mis opciones (DNI, NIE, CIF, PASAPORTE) pero cuando me comprueba la longitud de los datos de campo "documento" me salta el error de longitud de DNI, NIE y CIF a la vez, sea del "TipoDocumento" que sea.
No se muy bien como relacionar la longitud de las 4 opciones en el campo "documento" con la opción seleccionada en "TipoDocumento". Te adjunto captura de lo que te comento de los errores y captura de 4 columnas que me crea en la lista sin yo nombrarlas, y antes no me las mostraba...
He probado con lo que me sugerias pero algo no estoy haciendo bien y no logro verlo
el codigo de mi clase "Propietario":
Y el código de mi clase "OnChangeTipoDocumento":
Muchas gracias de antemano Javier!
Last edit: Manu 2024-02-27
Hola Manu:
La solución que te propuse es a nivel visual, no tiene en cuenta las validaciones. Claro, las propiedades ocultas siguen existiendo y al grabar no se cumple su validación.
Te propongo dos alternativas. La primera sería cambiar el uso @Length por @Mask. Mira la documentación de @Mask aquí:
https://www.openxava.org/OpenXavaDoc/docs/model_es.html#mascaras
La segundo alternativa es quitar todos los @Lengh y poner un @PropertyValidator propio en documento o poner una validación a nivel de entidad en un método @PrePersist. Esta validación propia para la longitud tendría en cuenta el tipo de documento para validar de una forma u otra.
Mira más sobre las opciones validación:
https://www.openxava.org/OpenXavaDoc/docs/validation-alternatives_es.html
Ayuda a otros en este foro como yo te ayudo a ti.
Buenos días Javier!
Lo he conseguido solucionar con la segunda alternativa que me comentabas, haciendo un validador y poniéndole yo las condiciones para cada caso.
Muchisimas gracias por tu ayuda!