2011-06-26 59 views
14

Kodum:Bir formdaki bir düğmeye tekrar tekrar tıklamak nasıl engellenir?

<h:form id="newBSTypePanel" > 
    <h:panelGrid columns="2" id="newRecod" > 
     <h:outputText value="Name"/><h:inputText value="#{treeTableController.newBStypeBean.currentObject.TYPENAME.value}" required="true" /> 
     <p:commandButton value="save" action="#{treeTableController.saveNewNodes}" oncomplete="Dlg.hide()" update="productDataForm"/> 
     <p:commandButton value="close" oncomplete="Dlg.hide()" /> 
    </h:panelGrid> 
</h:form> 

kaydetmek eylemi ile ilişkili işlevsellik biraz vardır. Düğmeyi tekrar tekrar tıklatırsam, veritabanında birkaç kayıt kaydedebilir. Bu benim dileğim değil. Birden fazla tıklamayı nasıl engelleyebilir ve çözebilirim?

cevap

33

:

  • PrimeFaces.widget.CommandButton

  • Yöntem Parametreler Dönüş Türü Açıklama

  • disable() - hükümsüz Devre Dışı s düğmesi
  • enable() - boşluk sağlar düğme

Yani sadece bu gibi kullanabilirsiniz:

<p:commandButton widgetVar="saveButton" 
       onclick="saveButton.disable()" 
       value="save" 
       action="#{treeTableController.saveNewNodes}" 
       oncomplete="saveButton.enable();Dlg.hide()" 
       update="productDataForm"/> 
+0

Evet, gerçekten işe yarıyor! Teşekkürler! Cevabınızı bilmeden önce, bu gibi sth ekliyorum ** = "false" \t \t \t \t

\t \t \t ** Ben bu kodları ** p ile ekleme ajax fonksiyonunu kullanabilir düşünüyorum: sayfanı all.Yeah değil KomutDüğmesi'ı ** – leo173

+0

varsayım çok inandırıcıdır. – FishGel

+10

Primefaces'in daha yeni sürümleri için (bunun için birkaç dakika kaybettiniz): ' esmin

3

Kullanım JavaScript ve Zamanlayıcı

<p:commandButton> 'ın İstemci Tarafı API Widget
<script> 

function disableClick(){ 
    document.getElementById('saveButton').disables = true; 
    setTimeout('document.getElementById(\'saveButton\').disables = false', 5000)" 
} 
</script> 


<h:form id="newBSTypePanel" > 
    <h:panelGrid columns="2" id="newRecod" > 
     <h:outputText value="Name"/><h:inputText value="#{treeTableController.newBStypeBean.currentObject.TYPENAME.value}" required="true" /> 
     <p:commandButton value="save" action="#{treeTableController.saveNewNodes}" oncomplete="Dlg.hide()" onclick="disableClick()" id="saveButton" update="productDataForm"/> 
     <p:commandButton value="close" oncomplete="Dlg.hide()" /> 
    </h:panelGrid> 
</h:form> 
+0

Teşekkür cevabınız için! Sanırım @RichardDing'in cevabı benim için daha iyi. – leo173

5

PrimeFaces daha yeni sürümleri için, çözüm olacaktır:

<p:commandButton widgetVar="saveButton" 
       onclick="PF('saveButton').disable()" 
       value="save" 
       action="#{treeTableController.saveNewNodes}" 
       oncomplete="PF('saveButton').enable();PF('Dlg').hide()" 
       update="productDataForm"/> 
İlgili konular