2012-05-15 49 views
0

既然我們可以應用JQuery的任何JSF渲染的成分,如下面的問題附加jQuery的事件JSF數據表

JSF to JQuery Component Integration

已經試過了,但它確實工作,我能成功整合的JQuery到JSF後,但問題是,無論何時我重新呈現h:dataTable,JQuery停止工作,我使用RichFaces和a4j,順便說一下。

例如,我有一個數據表如下

<h:dataTable id="someDataTable" value="#{backingBean.someDataModel}" var="item" styleClass="table"> 
    <h:column> 
     <h:outputText value="#{item.text}"/> 
    </h:column> 
</h:dataTable> 

和我有一個按鈕,當按下時重新呈現數據表,並用新的數據重新填充它。

<a4j:commandButton value="Click" reRender="someDataTable"/> 

,不要忘記我有此腳本的頁面

<script> 
    jQuery.noConflict(); 
    jQuery(document).ready(function() { 
     jQuery('.table').dataTable({ 
    "bSort": false}); 
    }); 
</script> 

現在,當第一次加載頁面,分揀工作正常,但每當我按一下按鈕,重新渲染表,該表已成功填充來自輔助bean的新數據,但排序不再有效。

據我猜測,我認爲這可能有事情做與

jQuery(document).ready() 

只有當文檔準備好了一種應用

jQuery.('.table').dataTable(); 

,所以我在想,如果有一些jQuery中的事件,我可以附加到dataTable重新呈現事件,因爲我不是jQuery或JS的大師。

+0

您可以使用重新呈現表格的按鈕/鏈接嗎?它是用Ajax完成的嗎? – romaintaz

+0

是的,我可以使用它,它工作完美,請注意,上面的數據表代碼只是一個片段,我沒有更新數據表的值,也沒有問題與AJAX事件 –

+0

我不知道如何richfaces工作,但我會嘗試'''reRenderJQuery()''是一個簡單的''jQuery('。table' ).dataTable {{0 {0}};}}; }); ',但我不知道Richfaces的commandButton是否可以處理AJAX事件! – StepTNT

回答

1

只需在ajax請求完成時重新執行腳本。

首先將您的腳本重構爲可重用函數。

<script> 
    jQuery.noConflict(); 
    jQuery(document).ready(function() { 
     initDataTable(); 
    }); 
    function initDataTable() { 
     jQuery('.table').dataTable({ 
      "bSort": false 
     }); 
    } 
</script> 

然後調用相同的功能中的<a4j:commandButton>oncomplete

<a4j:commandButton ... oncomplete="initDataTable()" />