2016-09-13 4 views
0

J'ai un <p:commandButton disabled="#{scannerStatus.disabled}" actionListener="#{scannerStatus.activate}" id="button-id"/>Comment mettre à jour l'attribut primefaces?

En scannerStatus je:
private boolean disabled; // en plus geters et setters

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

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

Le problème est que l'attribut disabled du commandButton ne change pas lorsque this.setDisabled(true) ligne de activate méthode est appelé.

J'ai besoin de quelques secondes l'attribut disabled du commandButton pour être true.

La propriété disabled est définie sur false, puis l'attribut disabled de commandButton est mis à jour. La mise à jour dans commandButton a donc lieu après la fin de la fonction.

Comment puis-je mettre à jour l'attribut du commandButton lorsque le this.setDisabled(true) de la méthode est activé?

J'ai essayé d'utiliser
RequestContext.getCurrentInstance().update("button-id");
après la this.setDisabled mais il ne fonctionne pas.

+1

@sinclair: Notez que OP prévu la 'this.setDisabled (true)' être immédiatement visible sur le côté client avant même 'état booléennes = doAnAction() 'est exécuté. Votre lien ne répond donc qu'à la partie Y de son http://xyproblem.info, pas à la partie X. – BalusC

+0

Comment appeler l'écouteur d'action si le bouton est initialement désactivé? – raven

+0

Le bouton n'est pas désactivé initialement. Le bouton doit être désactivé pendant quelques secondes après l'appel de l'actionListener. – Cristian

Répondre

1

Non testé, mais quelque chose comme ça devrait le faire:

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