2011-08-29 63 views
3

早上好!reRender一個富有的特定行:dataTable

有沒有可能reRender只有1特定行的rich:dataTable?

我有一個rich:dataTable,當我做一些事情時,我確定只有一行發生了變化,我只需要reRednder只有這一行,而不是整個表。可能嗎?怎麼樣?

XHTML: 

<rich:dataTable id="myTable" value="#{bean.table}" var="me"> 
    <rich:column> 
     <h:outputText value="#{me.id}" /> 
    </rich:column> 
    <rich:column> 
     <h:outputText value="#{me.valueOne}" /> 
    </rich:column> 
    <rich:column> 
     <h:outputText value="#{me.valueTwo}" /> 
    </rich:column> 
</rich:dataTable> 

<some:tag.... reRender="??????" action="bean.example" /> 

Java: 
public void example{ 
    // Do something that affects to the row selected 
} 

非常感謝。

回答

3

是的,這是可能的。您必須指定以下的事情:

  • 這列通過reRender屬性標籤的可調用的MBean方法呈現
  • 通過rich:dataTableajaxKeys屬性要呈現什麼行。

ajaxKeys屬性綁定到Set <Integer>保存要更新的行號的對象。

例如,假設您想調用使用a4j:commandButton的Mbean方法,並且希望在操作完成後呈現特定的行和列。您可以使用以下方法:

<a4j:commandButton action="#{bean.someAction}" reRender="columnID,columnID2"> 
    <f:setPropertyActionListener value="#{idx}" target="#{bean.selectedRow}" /> 
</a4j:commandButton> 

<rich:dataTable id="myTable" value="#{bean.table}" var="me" ajaxKeys="#{bean.rowsToUpdate}" rowKeyVar="idx"> 
     <rich:column id="columnID"> 
      <h:outputText value="#{me.id}" /> 
     </rich:column> 
     <rich:column id="columnID2"> 
      <h:outputText value="#{me.valueOne}" /> 
     </rich:column> 
     <rich:column> 
      <h:outputText value="#{me.valueTwo}" /> 
     </rich:column> 
    </rich:dataTable> 

bean.someAction()內,您添加要更新到rowsToUpdate整數集的行號:

HashSet<Integer> rows = new HashSet<Integer>(); 
rows.add(selectedRow); 
setRowsToUpdate(rows); 
+0

**陳啓泰**,它的作品!非常感謝你!!!! 只有一件事:我必須使用** dataTable **中的** rowKeyVar **屬性來知道選擇了哪一行:) - > 再次感謝。 – ganzux