2013-06-28 59 views
0

我有某事像這樣:如何reRender豐富:dataTable裏面a4j:重複?

<a4j:repeat value="#{results}" var="hdr" rowKeyVar="idx"> 
    <rich:dataTable var="item" value="#{results}" id="tbl#{idx}" first="#{idx}" rows="1"> 
     <a4j:commandButton value="update this table only" reRender="tbl#{idx}" /> 
    </rich:dataTable> 
</a4j:repeat> 

當我從輸出HTML檢查,數據表具有ID等形式:0:TBL具有在端部沒有IDX。

當結果中只有一行時,reRender將工作。

所以在這裏談到的一些問題:

  1. 爲什麼不DataTable的ID與EL表達式的作品,而「第一」屬性很好地工作?
  2. reRender如何工作,即使我只是指定tbl它仍然可以解析,而實際的HTML id是更長的東西像形式:0:tbl? (如果我知道reRender是如何工作的,我可能會破解它以使用a4j:repeat ...)
  3. 是否有任何技術或解決方法可用於刷新a4j中的特定dataTable:repeat ?

事實上,我已經成功reRendered整個a4j:由s:div包圍的重複塊。但刷新整個塊會重置滾動條,因此它不是所需的。...

回答

0

好的最新實驗表明,只需使用rich:dataTable id即可。

要點記住:

  1. 內A4J:重複,數據表的ID的絕對名稱會碰到這樣的:0:1:對應的索引。
  2. 但是,要找到它,只需使用rich:dataTable中定義的相同ID即可。最後不要附加任何後綴。
  3. 當觀察Chrome瀏覽器中的ajax數據時,reRendered部分就是組件的相關dataTable。

結論,想太多,沒能嘗試在開始簡單的解決方案。

0

對於1,表格的生命週期可能處於不同的階段。

對於2,它實際上是指用於查找給定ID的組件的UIComponent.findComponent。

對於3,可能嘗試使用UIComponent.findComponent()或#{rich:clientId('id')}來查看是否要檢索a4j:repeat嵌入式rich:dataTable的實際HTML元素ID。

如果是,那麼可以使reRender工作。如果不是,請查看是否有任何可以重寫reRender查找組件的方法。

相關問題