2016-09-13 7 views
0

Ich habe ein <p:commandButton disabled="#{scannerStatus.disabled}" actionListener="#{scannerStatus.activate}" id="button-id"/>Wie aktualisiert man das Attribut "primefaces"?

In scannerStatus ich habe:
private boolean disabled; // Plus geters und Setter

public void activate() { 
     this.setDisabled(true); 
     boolean status = doAnAction(); // This takes some seconds 

     if (!status) { 
      doSomething(); 
     } else { 
      this.setDisabled(false); 
     } 
    } 

Das Problem ist, dass das disabled Attribut von dem Befehl wenn this.setDisabled(true) Linie von activate Methode nicht ändern wird genannt.

Ich brauche einige Sekunden das disabled Attribut von der Befehlsschaltfläche zu true sein. Die disabled-Eigenschaft wird auf false zurückgesetzt, und dann wird das disabled-Attribut von commandButton aktualisiert. Das Update in commandButton erfolgt also nach dem Ende der Funktion.

Wie kann ich das Attribut der commandButton aktualisieren, wenn die this.setDisabled(true) in der Methode aktivieren?

habe ich versucht,
RequestContext.getCurrentInstance().update("button-id");
nach dem this.setDisabled zu verwenden, aber es funktioniert nicht.

+1

@sinclair: Beachten Sie, dass OP erwartet die 'this.setDisabled (true)' sofort sichtbar in der Client-Seite zu sein, noch bevor 'boolean Status = doAnAction() 'wird ausgeführt. Dein Link beantwortet also nur den Y-Teil seines http://xyprodukt.info, nicht den X-Teil. – BalusC

+0

Wie können Sie den Aktionslistener aufrufen, wenn die Schaltfläche anfänglich deaktiviert ist? – raven

+0

Die Schaltfläche ist anfangs nicht deaktiviert. Nach dem Aufruf des actionListeners muss die Schaltfläche für einige Sekunden deaktiviert werden. – Cristian

Antwort

1

Nicht getestet, aber so etwas wie dies sollte es tun:

<p:commandButton 
actionListener="#{scannerStatus.activate}" 
id="button-id" 
onstart="document.getElementById('button-id').disabled = true;" 
oncomplete="document.getElementById('button-id').disabled = false;" /> 
Verwandte Themen