Menu

no me funciona closeDialog()

2023-05-22
2023-05-25
  • Xavier Gonzalez

    Xavier Gonzalez - 2023-05-22

    Hola,

    Tengo un problema con el uso de closeDialog(), que siempre me ha funcionado y en otros proyectos no hay problemas haciendolo de la misma manera.
    A ver si me podéis orientar.

    Desde una vista tabular, tengo un botón para abrir un dialogo. Lo hago de la siguiente manera:

    public class ObrirDialegDatesExportarExcel extends ViewBaseAction {
    
        @Override
        public void execute() throws Exception {
            // TODO Auto-generated method stub
            //addInfo("ObrirDialegDatesExportarExcel");
    
            // Obrim dialeg
            showDialog();                                                     
            getView().setTitleId("Indica Dates per Descarregar");             
            getView().setModelName("DialegDatesExportar"); 
            getView().setValue("informacio", "<p>No marcar cap data,</br> per descarregar totes les dades</p>");
            setControllers("DialegDatesExportar");
    
        }
    
    }
    

    En el diálogo que abre, tengo un botón para confirmar fechas y hacer la operativa. Cuando acaba debe cerrar el dialogo que se ha mostrado.
    Pues no funciona.

    La action:

    public class OKDialegDatesExportarExcel extends ViewBaseAction implements IChainAction {
    
        private String nextAction = null;
    
        @Override
        public void execute() throws Exception {
            // TODO Auto-generated method stub
    
            // puesto aqui para ver por que no funciona        
            closeDialog();
    
            // operativa con el closeDialog() al final
    
    
        }
    
        @Override
        public String getNextAction() throws Exception {
            // TODO Auto-generated method stub
            return nextAction;
        }
    
    }
    

    Controlador del dialogo con el boton para descargar que se debería cerrar al acabar

    <controlador nombre="DialegDatesExportar">      
            <!-- Si fem click al boto descarregar -->
            <accion nombre="descarregar" clase="com.button.gc.actions.OKDialegDatesExportarExcel"/>
        </controlador>
    

    Pues en la accion anterior, he puesto el closeDialog() al principio, y no cierra el dialogo. Incluso he comentado todo el código de la operativa.
    Si busco el title de la view, compruebo que es el dialogo que se ha abierto es correcto.

    Si pongo el closeDialog() al final de la accion (primera) que abre el dialogo, lo cierra...

    Si le doy a la x del dialogo arriba a la derecha, funciona y se cierra.

    Algo se me escapa...

    Es una version algo antigua, pero debería funcioar. XavaPro 6.4.1

     

    Last edit: Xavier Gonzalez 2023-05-22
  • Xavier Gonzalez

    Xavier Gonzalez - 2023-05-24

    No sé el motivo, pero si quito IChainAction entonces si que me funciona el closeDialog().

    Alguna idea?

     
  • Xavier Gonzalez

    Xavier Gonzalez - 2023-05-24

    Bueno, ya sé el motivo de por qué no funciona el closeDialog() pero no acabo de poderlo solucionar.

    Mi accion, luego llama otra accion que descargar un fichero con un servlet. Para hacerlo uso la siguiente accion:

    public class ExportarExcelTaulaDinamica extends ViewBaseAction implements IForwardAction /*, IJavaScriptPostAction*/ {
    
        @Override
        public void execute() throws Exception {
            // TODO Auto-generated method stub
            addInfo("ExportarExcelTaulaDinamica");
            System.out.println("ExportarExcelTaulaDinamica");
        }
    
    
        @Override
        public String getForwardURI() {
            // TODO Auto-generated method stub
            // Un cop acabat cridem servlet que se encarregara de descarregar fitxer --> DescarregarArxiu.java 
            System.out.println("getForwardURI");
            return "javascript:void(window.open('/GC/downloadexplotacio'))";
        }
    
        @Override
        public boolean inNewWindow() {
            // TODO Auto-generated method stub
            return false;
        }
    
    
    //  @Override
    //  public String getPostJavaScript() {
    //      // TODO Auto-generated method stub
    //      System.out.println("getPostJavaScript");
    //      return "alert('hola')";
    //  }
    
    }
    

    Como explica la IForwarAction, al llamar javascript no recarga la pagina.
    Es por eso, que si hago F5 al final, se cierra el dialógo y entonces se muestran los addInfo() que tenía pendientes.

    He intentado hacer un refresco de la pantalla con el metodo getPostJavaScript() pero no funciona. No se me llama el método en ningún momento.

     
  • Javier Paniza

    Javier Paniza - 2023-05-24

    Hola Xavier:

    Como explica la IForwarAction, al llamar javascript no recarga la pagina.

    Claro, piensa que te vas a otro página diferente, no que vas a ejecutar JavaScript. Justo por eso creamos la IJavaScriptPostAction. He visto que la tienes puesta pero comentada. ¿No te ha funcionado?


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

     
  • Xavier Gonzalez

    Xavier Gonzalez - 2023-05-24

    Hola JP,

    Claro, piensa que te vas a otro página diferente, no que vas a ejecutar JavaScript.

    Tengo inNewWindow() en false, para que no se abra ninguna pestaña en el navegador. Se queda en la misma misma página.

    Justo por eso creamos la IJavaScriptPostAction. He visto que la tienes puesta pero comentada. ¿No te ha funcionado?

    El getPostJavaScript() no me ha funcionado si esta el getForwardURI(). Si comento IForwardAction y sus métodos, entonces sí que funciona. No sé si es un bug o realmente es el comportamiento correcto.
    Al final, lo que me gustaría es que se cerrase el dialogo abierto despues de descargar el fichero. O no sería problema, primero cerrar el diálogo y después bajar el fichero (lo he probado, y tampoco va...)

     

    Last edit: Xavier Gonzalez 2023-05-24
  • Xavier Gonzalez

    Xavier Gonzalez - 2023-05-25

    Bueno,

    Al final he encontrado una forma de que funcione.
    He descartado usar el método getForwardURI(), ya que necesitaba refrescar página y no lo hacía. Y como bloqueaba al getPostJavaScript, he probado de solo usar el getPostJavaScript() y llamar al servlet en el return:

    public class ExportarExcelTaulaDinamica extends ViewBaseAction implements  IJavaScriptPostAction {
    
                @Override
                public void execute() throws Exception {
                    // TODO Auto-generated method stub
                    addInfo("ExportarExcelTaulaDinamica");
                    System.out.println("ExportarExcelTaulaDinamica");
                }
    
                @Override
                    public String getPostJavaScript() {
                        // TODO Auto-generated method stub
                        System.out.println("getPostJavaScript");
                        return "window.open('/GC/downloadexplotacio')";
                    }
         }
    

    De esta forma, descarga el fichero y cierra el dialogo, además de mostrar los addInfo o addError si es necesario.

     

Log in to post a comment.