openxava
Blog

15 de mayo del 2023

OpenXava 7.1 liberado

Esta nueva versión de OpenXava viene cargada con novedades excitante, con cosas que estáis pidiendo desde hace mucho y por fin hemos tenido tiempo de incluir, como un calendario para modo lista, una anotación @Mask, combo con valor editable, un botón para limpiar las referencias y mucho, mucho más.

Además, hemos hecho un esfuerzo hercúleo para aumentar la seguridad web de las aplicaciones, por lo que si vuestras aplicaciones son accesibles en internet por el público en general y hackers diversos ahora van a ser mucho más seguras.

Para actualizar edita el archivo pom.xml en tu proyecto y cambia el valor de la propiedad openxava.version, de esta manera:

<properties>
    <openxava.version>7.1</openxava.version>
    ...
</properties>

Después compila tu proyecto:

  • Con OpenXava Studio:
    • Botón derecho del ratón en tu proyecto > Run As > Maven clean
    • Botón derecho del ratón en tu proyecto > Run As > Maven install
  • O con línea de órdenes: mvn clean package

Mira las instrucciones de migración.

Calendario en modo lista

Esta primera versión del calendario es mágica y automática, sin que como programadores tengáis que hacer nada. Simplemente con que la entidad del módulo tenga una fecha aparecerá un nuevo icono en modo lista, para escoger el formato calendario:



El aspecto del calendario es este:


Podéis crear nuevo registro pulsando con el ratón en un día y editar los registros existentes pulsando en ellos.

Mejoras de seguridad web

Hemos cambiado muchos aspectos de la interfaz web que genera OpenXava para que sea mucho más segura y más difícil de hackear. Esta es una relación de lo que hemos arreglado:

  • Arreglo: Vulnerabilidad de denegación de servicio.
  • Arreglo: JavaScript en línea para eventos en elementos HTML.
  • Arreglo: Vulnerabilidades de inyección de XSLT.
  • Arreglo: Encabezado X-Content-Type-Options ausente.
  • Arreglo: Cookie sin atributo SameSite.
  • Arreglo: Divulgación de errores de aplicación.
  • Arreglo: ID de sesión en reescritura de URL.
  • Arreglo: Vulnerabilidades de script entre sitios (XSS).
  • Arreglo: Filtrado de datos en .htaccess para algunas URL.
  • Arreglo: Encabezado de Política de Seguridad de Contenido (CSP) no establecido.
Si tu aplicación es pública o corre en un entorno donde la seguridad es importante te aconsejamos actualizar a 7.1.

Anotación @Mask

Ahora puedes anotar cualquier propiedad @Mask para indicar una máscara de entrada de datos. Una máscara es una cadena de caracteres que define el formato válido de los valores de entrada. Puedes usar algunos de los siguientes validadores:

  • 'L': el usuario deberá ingresar en su lugar una letra alfabética de A ~ z.
  • '0': el usuario deberá ingresar en su lugar un dígito.
  • 'A': el usuario deberá ingresar en su lugar un carácter alfanumérico.
  • '#': el usuario deberá ingresar en su lugar un dígito, espacio en blanco, '+' o '-'.

También puedes agregar caracteres especiales, espacio en blanco de manera estática e incluso combinar los validadores, por ejemplo:

@Mask("L-000000")
private String pasaporte;

@Mask("0000 0000 0000 0000")
private String tarjeta;

@Mask("LL 000 AA")
private String patente;

@Mask("0.000/0-000")
private String customMask;

Botón para limpiar referencias

Por fin, ya hay un botón en la interfaz de usuario para limpiar el valor de una referencia:


También para las @DescriptionsList:

Combos con valor editable

Tenemos un nuevo editor llamado, EditableValidValues, que puedes asignar a una propiedad String. De esta manera:

@Editor("EditableValidValues")
@Column(length = 15)
private String color;
Si después añadimos por código valores para convertirlo en un combo dinámico, así:
getView().addValidValue("color", "blc", "Blanco");
getView().addValidValue("color", "ngr", "Negro");
Dado que usa EditableValidValues además de un combo con los valores el campo sigue siendo editable. En este ejemplo seleccionando Blanco, puedes editarlo por Blanco beige o ingresar un nuevo valor como Amarillo. Estos nuevos valores no se agregarán a la lista original de opciones para el uso en otros registros:

Nuevo editor de texto rico

La librería JavaScript que usabamos hasta ahora, CKEditor 4, no soporta el uso de Content Security Policy, lo que significa que no se puede usar en un entorno seguro. Por cuestión de licencia no se puede actualizar a CKEditor 5, por lo que hemos tenido que optar por TinyCME. El resultado no solo es que es una librería más segura sino que ahora tenemos un editor de texto rico mucho más moderno:

Librerías actualizadas

Hemos actualizado la siguientes librerías de terceros:

  • Librería FilePond de JavaScript usada para el editor de subida de archivos actualizada a 4.30.4 por motivos de seguridad.
  • Librería Leaflet de JavaScript usada para los mapas actualizada a 1.9.3.
  • HtmlUnit actualizado a 2.70.
  • Tomcat embebido usado para desarrollo actualizado a 9.0.73.
  • Log4j-api y core actualizadas a 2.20.0.
  • Jersey client, hk2 y media actualizado a 2.39.
  • Lombok actualizado a 1.18.26.
  • Jsoup actualizado a 1.15.4.
  • Groovy actualizado a 4.0.10.
  • Hibernate actualizado a 5.6.15.Final.
  • Commons-fileupload actualizado a1.5.
  • Versiones de los controladores en la documentación y nuevos proyectos actualizadas para PostgreSQL, Oracle y AS/400.

Otras mejoras

Hemos hecho muchas mejoras en otras áreas:

  • Nuevo artículo en la documentación para utilizar Kotlin en el desarrollo con OpenXava en inglés, español y chino.
  • Nueva anotación @ZerosFilled equivalente al estereotipo ZEROS_FILLED/RELLENADO_CON_CEROS.
  • Mejora en la traducción automática de etiquetas en inglés para propiedades calificadas.
  • defaultDescriptionPropertiesValueForDescriptionsList en xava.properties para valores predeterminados en @DescriptionsList.
  • Nueva propiedad signInJSP en naviox.properties para definir una página de inicio de sesión personalizada.
  • El estilo en línea ya no está permitido en HTML.
  • Se ha eliminado el estilo en línea de todo el código HTML generado por OpenXava.
  • Se han eliminado muchos métodos de org.openxava.web.Style que se utilizaban internamente por el generador de interfaz de usuario.
  • La fecha y hora de las publicaciones en @Discussion utilizan el formato de campos de fecha.
  • El atributo cssStyle se ignora en las etiquetas <xava:link> y <xava:image>.
  • Nuevas clases en base.css para utilizar como alternativa al estilo en línea, como ox-display-none, ox-width-100, etc.
  • Nueva etiqueta <xava:nonce> para generar un número nonce para su uso en JavaScript en línea.
  • Nuevo método getDefaultBrowser() en HtmlUnitUtils.
  • Nuevo método getSignInURL() en ISignInHelperProvider.
  • El tipo de retorno para el método init() en ISignInHelperProvider ahora es String[] en lugar de String.
  • Nuevo método start(String dbName, int port) con número de puerto en DBServer.
  • Nueva propiedad defaultValues en NewAction para enviar valores predeterminados en una cadena en formato clave/valor.
  • Algunas nuevas etiquetas comúnmente utilizadas para ser utilizadas en las aplicaciones.

Arreglos

Aunque esta no es una versión de mantenimiento hemos arreglado algo:

  • Arreglo: Enlaces rotos en la documentación de personalización de la guía de referencia.
  • Arreglo: La interfaz de usuario sin ningún estilo CSS si el usuario tiene como preferencia un tema que ya no existe.
  • Arreglo: Enlace incorrecto en el documento de migración en inglés para la migración de OpenXava 6.6.3 a OpenXava 7.0 en una sección incorrecta.
  • Arreglo: @Editor no tiene efecto al llamar a View.addValidValue() en la propiedad.

blog comments powered by Disqus

English - 中文