jsf - rowspan - 如何更新PrimeFaces數據表上的特定單元格



primefaces datatable selection (1)

在我的dataTable我將每篇文章鏈接到一個特定的任務。

在一個commandButton的點擊一個任務列表顯示出來,所以我想在選擇一個任務,更新dataTable的特定單元dataTableoutputText id="columnTache" ),而不更新我的dataTable的其餘部分。

<p:dataTable value="#{myController.articleList}" 
             id="tabArticle"                            
             var="article"  
             rowKey="#{article.id}"  >
    <p:column headerText="quantite" >
        <pe:inputNumber value="#{article.quantite}" />
    </p:column>                            
    <p:column headerText="taches" >     
        <h:outputText value="#{article.tache.libelleTache}" id="columnTache" />
    </p:column>
    <p:column headerText="taches"  >
        <p:commandButton  oncomplete="PF('dialogTasks').show();" update=":formSelectAffecterTache">
            <p:ajax event="click" listener="#{myController.setArticle(article)}" />
        </p:commandButton>
    </p:column>
</p:dataTable>

<p:dialog header="#{bundleTech.lbl_taches}" widgetVar="dialogTasks" >     
    <h:panelGrid columns="1" >
        <h:form id="formSelectAffecterTache">
            <ui:include src="/pages/listTacheSelect.xhtml">
                <ui:param name="bean" value="#{myController}" />
                <ui:param name="action" value="affecterTache" /> 
            </ui:include>               
        </h:form>
    </h:panelGrid>        
</p:dialog>

我的dataTable的更新是在託管bean:

public void affecterTache() {
    article.setTache(selectedSingleTache);
    RequestContext.getCurrentInstance().update("form:tabArticle");           
}

一個dataTable是一個命名容器,所以它裡面的組件將被添加dataTableid 。 此外,表(每行)中呈現的每個數據迭代都會產生生成的id的影響。 由於表單也是一個命名容器,因此您的outputText組件id將生成為formId:tabArticle:0:columnTache第一行中的formId:tabArticle:0:columnTache ,第二行中的formId:tabArticle:0:columnTache

如果你要在你的commandButton上設置一個id ,你將得到formId:tabArticle:0:myButtonformId:tabArticle:1:myButton等。你可以在你的點擊處理程序中使用這個id來創建相應的inputText clientId 。 但是,由於您將article傳遞給某個方法,因此無法檢查哪個按鈕被點擊。 因此,首先將click listeners方法更改為:

public void useArticle(AjaxBehaviorEvent event) {
    UIComponent component = event.getComponent();
}

現在,你知道哪個按鈕被點擊( event.getComponent() ),但是你也需要你的article 。 您可以將它設置為XHTML中按鈕的屬性:

<p:commandButton id="myButton"
                 oncomplete="PF('dialogTasks').show();" 
                 update=":formSelectAffecterTache">
    <p:ajax event="click"
            listener="#{myController.useArticle}" />
    <f:attribute name="article"
                 value="#{article}" />
</p:commandButton>

這個屬性可以在你的監聽器中讀取:

Article article = (Article) component.getAttributes().get("article");

現在,為了更新inputText ,只需使用按鈕的clientId

String update = component.getClientId().replace(":myButton", ":columnTache");

將它存儲在你的bean中,當你準備好的時候,更新:

RequestContext.getCurrentInstance().update(update);

也可以看看:





datatable