Ho lavorato all'applicazione CRUD e ho bisogno di esportare i dati dal database al file csv. Per l'esportazione, ho dovuto disabilitare ajax, in modo mostrato nella seguente codice:Fornisce condizionalmente il download del file o visualizza il messaggio di errore di convalida dell'esportazione
<p:commandButton value="Export" ajax="false" action="myController.export"/>
Nel metodo invocato, creo il file e scaricarlo tramite OmniFaces metodo di utilità:
Faces.sendFile(file, true);
Utilizzando lo stesso metodo, a verificare se in realtà non v'è alcun dato, e se non c'è alcun dato, viene mostrata finestra di avviso:
RequestContext.getCurrentInstance().showMessageInDialog(new FacesMessage(FacesMessage.SEVERITY_WARN, "Warning!", "No available data for export."));
Ora, mentre tutto questo funziona come inteso, il problema è che poiché ajax è disabilitato, la finestra di dialogo non può essere mostrata dinamicamente e la pagina viene ricaricata. Se ajax è abilitato, la finestra di dialogo viene visualizzata dinamicamente, ma il download del file non inizia.
Ho cercato di ovviare a questo problema, utilizzando Monitor download o facendo clic sul secondo pulsante con la forza, ma finora non ho fatto alcun progresso in merito.
Esiste un modo generalmente accettabile per risolvere problemi come questo?