Отключить commandButton в JSF - PullRequest
       15

Отключить commandButton в JSF

2 голосов
/ 07 августа 2009

Кажется, это должно быть довольно просто, но я не чувствую этого.

У меня есть JSF CommandButton, которая выполняет долго выполняющуюся серверную задачу (10-15 секунд). Я видел формы, в которых контекст кнопки изменяется после нажатия (метка на кнопке изменяется, и кнопка становится отключенной до завершения обработки).

Я использую ICEFaces, и для свойства disabled установлено булево значение в базовом коде страницы.

Слушатель действия, связанный с кнопкой, изменит логическое значение, чтобы отключить ее, но, увы, никаких изменений в JSP.

Любой

Ответы [ 5 ]

4 голосов
/ 07 августа 2009

Что вы можете сделать, это изменить статус кнопки, используя Javascript:

<h:commandButton ... onclick="this.disabled=true"/>


<Ч />

Изменить относительно комментария:

Если предыдущий код не отправляет форму, то вы должны отключить кнопку через некоторое время после нажатия, а не «во время» самого нажатия. Вы можете сделать это, используя следующий код:

<h:commandButton ... onclick="setTimeout('this.disabled=true', 100);"/>

Я не уверен, что факт использования ключевого слова this непосредственно в методе setTimeout будет работать правильно. Если нет, вы можете использовать другой способ сделать это:

<h:commandButton ... onclick="disableButton(this.id);"/>

со следующей функцией Javascript:

function disableButton(buttonId) {
    setTimeout("subDisableButton(" + buttonId + ")", 100);
}

function subDisableButton(buttonId) {
    var obj = document.getElementById(buttonId);
    if (obj) {
        obj.disabled = true;
    }
}

(я уверен, что этот код может быть улучшен, таким образом)

1 голос
/ 10 декабря 2011

аналогично решению от роментаз

Для конкретного решения Firefox работает следующее (оно не работает в IE):

<h:commandButton ... onclick="disableButton(this.id);" />

Использование функции Javascript:

function disableButton(buttonId) {

    var obj = document.getElementById(buttonId);

    if (obj) {
       setTimeout(function(thisObj) { thisObj.disabled=true; }, 50, obj);

    }
}
1 голос
/ 11 октября 2010

сделать javascript submit (); сначала отключи кнопку

1 голос
/ 19 сентября 2009

Вы должны использовать ice: commandButton вместо h: commandButton, так как он имеет свойствоpartSubmit, которое будет выполнять действие как вызов AJAX. Это должно обновить состояние вашей кнопки, поэтому, если для свойства на сервере установлено значение false, ваша кнопка должна быть отключена.

0 голосов
/ 17 апреля 2012

сделайте это после того, как icefaces обновит DOM. Вы можете использовать ice.onAfterUpdate(callback):

Здесь с jQuery

ice.onAfterUpdate(function(){
    updateButtons();
});

function updateButtons(){
   if(!isButtonEnabled()){
    jQuery(".myButton").attr('disabled', true);
    jQuery(".myButton").removeClass("iceCmdBtn").addClass("iceCmdBtn-dis");
   }else{
    jQuery(".myButton").removeAttr('disabled');
    jQuery(".myButton").removeClass("iceCmdBtn-dis").addClass("iceCmdBtn");
   }
}
...