Come condizionalmente richiamare a4j:commandButton oncomplete script a seconda azione risultato

Ho un

<a4j:commandButton action="#{myBean.doCalculation}"
                   oncomplete="redirectBrowser()" />

Tuttavia, se c’è un errore a myBean.doCalculation(), quindi oncomplete attributo viene sempre richiamato. Come faccio a lasciare dipendono dal risultato di un metodo di azione?

InformationsquelleAutor Lurtz | 2011-04-01



3 Replies
  1. 4

    È possibile verificare la presenza di errori nell’evento oncomplete e reindirizzare quando non vengono trovati. Esso può essere fatto come questo

    oncomplete="#{facesContext.maximumSeverity == null ? 'redirectBrowser()' : 'doSomethingElse()'}"
    • Non c’è davvero nessun problema con a4j:pulsante di comando e navigazione – non è progettato per essere utilizzato per la navigazione. Una possibilità è quella di usare <redirect/> per la navigazione.
  2. 3

    Se sei di JSF 2.0, è possibile utilizzare FacesContext#isValidationFalied() per verificare se la convalida non è riuscito o non:

    oncomplete="if (#{not facesContext.validationFailed}) redirectBrowser()"

    Tuttavia, l’esecuzione di reindirizzare il metodo di azione è più pulito:

    public String doCalculation() {
        //...
    
        if (success) {
            return "nextPage.xhtml?faces-redirect=true";
        } else {
            return null;
        }
    }

    Ancora più pulito sarebbe solo la validazione da parte di un Validator. In questo modo il metodo di azione, semplicemente, non può essere invocato quando la convalida non riuscita.

    • Grazie per questa risposta! E ‘ stato molto utile. Rispettosamente in disaccordo con un punto, facendo il redirect nel metodo di azione è meno pulita — IMHO, consentendo reindirizzamento da restituire una stringa è un difetto di progettazione Volti…
    • Non è assolutamente un difetto di progettazione. PRG è uno dei più comunemente usato di web design patterns: en.wikipedia.org/wiki/Post/Redirect/Get Tuttavia, l’utilizzo di moduli di inserimento per il plain vanilla navigazione da pagina X a pagina Y è assolutamente un difetto di progettazione (da sviluppatore, non da JSF). Vedi anche stackoverflow.com/questions/4317684/…
    • Ci dispiace, pigro non è la parola che stavo cercando. Niente di sbagliato con il PRG; è solo un goffo sintassi è quello che sto ottenendo. Sembra strano per restituire una stringa invece di chiamare qualche metodo di reindirizzamento.
  3. 2

    Bene, solo in cerca di facesContext.maximumSeverity == null non è sufficiente, ci può essere un avvertimento di come corrente massima gravità, che dovrebbe reindirizzare, troppo. Invece, scrivere un metodo che guarda se ci sono max gravità di priorità di errore…

Lascia un commento