2016-09-13 8 views
0

У меня есть <p:commandButton disabled="#{scannerStatus.disabled}" actionListener="#{scannerStatus.activate}" id="button-id"/>Как обновить атрибут perffaces?

В scannerStatus у меня есть:
private boolean disabled; // плюс geters и сеттеры

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

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

Проблема заключается в том, что атрибут CommandButton disabled не меняется при this.setDisabled(true) линии от activate метода называется.

Мне нужно несколько секунд атрибут disabled из commandButton, который будет true.

Свойство disabled установлено на значение false, а затем изменяется атрибут disabled из commandButton. Таким образом, обновление в commandButton происходит после завершения функции.

Как обновить атрибут commandButton, когда активируется метод this.setDisabled(true)?

Я пытался использовать
RequestContext.getCurrentInstance().update("button-id");
после this.setDisabled, но это не работает.

+1

@sinclair: Обратите внимание, что OP ожидается 'this.setDisabled (истина),' быть сразу видны на стороне клиента еще до того, 'логического состояния = doAnAction() 'выполняется. Таким образом, ваша ссылка отвечает только на часть Y его http://xyproblem.info, а не на часть X. – BalusC

+0

Как вы можете вызвать прослушиватель действий, если кнопка изначально отключена? – raven

+0

Кнопка изначально не отключена. Кнопка должна быть отключена на несколько секунд после вызова actionListener. – Cristian

ответ

1

Не тестировался, но что-то вроде этого следует сделать это:

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