2011-11-03 49 views
4

我希望能夠禁用下面一旦它擊中了命令按鈕並啓用它一旦事件監聽器運行和MSG1呈現命令按鈕。禁用/啓用AJAX事件

<h:commandButton value="Submit">      
    <f:ajax execute="@form" render="msg1" listener="{bean.method}" /> 
</h:commandButton> 

我該怎麼做?

更新:我發現我可以onclick事件連接到命令元素本身來禁用它。如何檢測偵聽器方法已返回,以便我可以再次啓用該按鈕?

+0

請注意,您並未使用JSP,而是使用JSF。更重要的是,您最有可能使用JSP的後繼式Facelets(在JSP中不直接支持'f:ajax')。我編輯了標題和標籤。請記住將來的問題。要了解的差異,看到http://stackoverflow.com/questions/2095397/what-is-the-difference-between-jsf-servlet-and-jsp/2097732#2097732 – BalusC

回答

5

你可以在<f:ajax>onevent屬性的幫助下完成,它指向一個處理JSF Ajax事件的JavaScript函數。

如:

<h:commandButton value="Submit"> 
    <f:ajax execute="@form" render="msg1" listener="#{bean.method}" onevent="handleDisableButton" /> 
</h:commandButton> 

(注意,我定錯了EL在listener爲好)

這個JS:

function handleDisableButton(data) { 
    var buttonElement = data.source; // The HTML DOM element which invoked the ajax event. 
    var ajaxStatus = data.status; // Can be "begin", "complete" and "success". 

    switch (ajaxStatus) { 
     case "begin": // This is called right before ajax request is been sent. 
      buttonElement.disabled = true; 
      break; 

     case "complete": // This is called right after ajax response is received. 
      // We don't want to enable it yet here, right? 
      break; 

     case "success": // This is called when ajax response is successfully processed. 
      buttonElement.disabled = false; 
      break; 
    } 
} 
+0

我不能讓handleDisableButton執行。由於某種原因,onevent不會觸發。 :| – Mark13426

+0

您使用的是JSF impl/version?你在使用JSP還是Facelets? (即你使用的是'.jsp'還是'.xhtml'文件?)你最初用JSP標記了這個問題,但是''完全不工作,沒有黑客攻擊。 – BalusC

+0

我正在使用.xhtml文件和JSF 2.0 – Mark13426

0

如果您使用RichFaces的A4J :commandButton具有防止這種情況的狀態屬性。