Come visualizzare la finestra di dialogo solo in caso di invio di un modulo riuscito

Ho un modulo con 2 campi di input richiesti e un pulsante di comando che mostra una finestra di dialogo:

Vorrei mostrare la finestra di dialogo solo quando la convalida è stata superata e il metodo di azione è stato eseguito. Tuttavia, quando i campi di input richiesti sono vuoti e il metodo di azione non viene quindi eseguito, la finestra di dialogo viene comunque mostrata.

Come faccio a visualizzare la finestra di dialogo solo in caso di invio di un modulo riuscito?

La risposta ajax di PrimeFaces mette un object args nello scope JS che ha una proprietà validationFailed . Potresti controllare per quello nel oncomplete .

  

Se si sta eseguendo la convalida nel metodo di azione anziché in un normale validatore e non è ansible rielaborarlo, è necessario chiamare manualmente FacesContext#validationFailed() .

Guarda anche:

  • Previeni il dialogo di conferma dall’apertura quando c’è un errore di convalida

Un’alternativa diversa è l’uso di RequestContext#execute() all’interno del metodo di azione per istruire a livello di codice PrimeFaces per l’esecuzione di un determinato pezzo di codice JS. Quindi, invece di oncomplete , puoi farlo anche nel metodo action:

 RequestContext.getCurrentInstance().execute("dialogaboutDEQ.show()"); 

Se la validazione fallisce, allora il metodo action non viene invocato e quindi anche questo non verrebbe eseguito.

Guarda anche:

  • Come trovare l’indicazione di un errore di convalida (richiesto = “true”) mentre si esegue il comando ajax

Anche in questo caso un’alternativa diversa consiste nell’utilizzare l’attributo visible della finestra di dialogo. Apparentemente il tuo pulsante di comando sta aggiornando l’intero modulo, inclusa la finestra di dialogo (anche se la finestra di dialogo è dichiarata male con appendToBody="true" che non dovrebbe più essere nella forma padre, cioè deve avere appendToBody="false" o hanno una propria forma, ma ala). Puoi controllare ad es. Su FacesContext#isPostback() e FacesContext#isValidationFailed() se viene eseguito un postback di successo:

  

Guarda anche:

  • Differenza tra gli attributi resi e visibili di
  • Come mostrare un popup in primefaces con i messaggi richiesti, solo se questi messaggi esistono?