2009-08-06 3 views
2

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

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

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

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

Кто-нибудь?

ответ

4

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

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



Редактировать относительно комментария:

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

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

Я не уверен, если факт использование этого ключевого слова непосредственно в методе 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; 
    } 
} 

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

+0

к сожалению, с ICEfaces, этот подход не работает. Он фактически отключает его от отправки вообще. Я попытался сделать это onMouseUp, но это отключает его после первого щелчка ... –

+0

А как насчет моего нового ответа? – romaintaz

+0

Могу ли я включить кнопку назад после ее отключения? –

1

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

+0

+1 для использования каркаса, который использует OP для решения проблемы элегантным способом. – SplinterReality

1

сделать javascript submit(); первый, а затем отключить кнопку

1

Подобный раствор из romaintaz

Для конкретного решения 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); 

    } 
} 
0

сделать это после того, как ледяные поверхности обновили 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"); 
    } 
} 
Смежные вопросы