2013-07-18 82 views
2

我们有单选按钮和ajax调用来改变单选按钮的值。有没有办法在呈现ajax响应之前禁用命令链接

<h:selectOneRadio id="name" value="#{nameTO.suffix}">   
     <f:ajax render="fname lname"/> 
     <f:selectItems value="#{optionValues['suffix']}" /> 
</h:selectOneRadio> 

如果用户选择不同的值存在Ajax调用,并在平均时间用户点击提交表单和空值被传递到后端延迟(如域没有显示在网页上)。

有没有办法禁用命令链接,直到ajax响应呈现?

回答

1

是的,当然有。你只需要通过一个命令按钮来改变命令链接,因为JSF命令链接并不能被JS的方式取消。如有必要,可以使用一些CSS来使按钮看起来更好。

完成之后,您可以使用<f:ajax onevent>来侦听ajax事件。在ajax请求开始时,您可以禁用命令按钮。在ajax请求成功后,您可以重新启用命令按钮。

因此,考虑到本次活动功能监听器示例,

function handleDisableButton(data) { 
    var button = document.getElementById("formId:buttonId"); 

    switch (data.status) { 
     case "begin": // This is called right before ajax request is been sent. 
      button.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 right after update of HTML DOM. 
      button.disabled = false; 
      break; 
    } 
} 

或者更短,但也许很难解释对于初学者:

function handleDisableButton(data) { 
    document.getElementById("formId:buttonId").disabled = (data.status != "success"); 
} 

可以按如下方式执行所需的要求:

<f:ajax ... onevent="handleDisableButton" /> 
相关问题