Menu

Se puede reaccionar al cambio de sección

JOSE ELIAS
2024-06-30
2024-07-02
  • JOSE ELIAS

    JOSE ELIAS - 2024-06-30

    El modelo, en el que trabajo, tiene varias colecciones calculadas (8) y la cantidad de registros es alta (+de 100).
    El tiempo de carga y pintad de las colecciones es alto y pretendo que sólo se carguen cuando se pulsa en su sección para intentar reducirlo.

    ¿Puedo hacerlo al cambio de sección?

    Empezaría con una colección, la visible e iría cargando la que se fuese viendo.

     
  • Javier Paniza

    Javier Paniza - 2024-07-02

    Hola José:

    No hay ninguna acción al-cambiar o evento para cambio de sección, aunque sí que podrías sobreescribir la acción estándar de OpenXava Sections.change, que aunque fuera a nivel global, al final sí que te permitiría controlar tu mismo el cambio de sección, sin embargo, no te servirá para nada.

    He estado probando y OpenXava no carga nada de la sección, incluidas las colecciones hasta que no entras en la sección. Es decir, OpenXava ya funciona como quieres implementarlo tú, carga las colecciones de la secciones bajo demanda, solo cuando cambias a la sección, pero...

    Tiene un contador de registros en la etiqueta de la sección, que cuando la colección es una @OneToMany lo puede calcular con un count de JPA, que es rápido, pero cuando es una propiedad calculada, no tiene otra que obtener toda la colección y hacerle un .size() por Java. Por eso, las colecciones calculadas se ejecutan para todas las secciones, para obtener el número de registros que ponemos entre paréntesis en la etiqueta de la sección.

    Es decir, que ni añadir paginación a las colecciones calculadas ni añadir un @OnChangeSection te va a resolver este problema.

    La solución sería poder desactivar el mostrar el número de registro en las colecciones en tu aplicación con alguna propiedad en xava.properties, pero de momento no lo tenemos. El contador sale siempre a piñón fijo. Puedes pedirlo para que lo añadamos en próximas versiones.

    Mientras tanto te ofrezco un truco sucio que te funcionará. Resulta que el contador de registros en sección sólo sale si esa sección contiene únicamente una colección. Pues simplemente añádele una propiedad extra, así:

    @View(members=
        ...
        "miSeccionConColeccion { miColeccionCalculada; miPropiedadTonta" }
    
        }
    

    Ese miembro extra puede ser propiedad calculada tonta, así:

    public String getMiPropiedadTonta() {
        return null;
    }
    

    Después puedes ocultar esa propiedad por CSS.


    Ayuda a otros en este foro como yo te ayudo a ti.

     

Log in to post a comment.