tablas registros example etiquetas consultas columns buscar jsf primefaces datatable

jsf - registros - primefaces datatable dynamic columns



Cómo actualizar una celda específica en una tabla de datos PrimeFaces (1)

Una dataTable es un contenedor de nombres, por lo que los componentes dentro de ella se anteponerán con la dataTable la dataTable . Además, cada iteración de los datos presentados en la tabla (cada fila) tendrá efecto de los id generados. Como un formulario también es un contenedor de nombres, los id componentes de su outputText se generarán como formId:tabArticle:0:columnTache en la primera fila, formId:tabArticle:0:columnTache en la segunda fila, etc.

Si estableces una id en tu commandButton , obtendrás formId:tabArticle:0:myButton , formId:tabArticle:1:myButton etc. Puedes utilizar esta id en tu controlador de clics para crear el inputText clientId correspondiente. Pero, desde que pasa el article a un método, no puede verificar en qué botón se hizo clic. Entonces, antes que nada, cambie el método de escuchar clic a:

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

Ahora, usted sabe en qué botón se hizo clic ( event.getComponent() ), pero también necesita su article . Puede configurar eso como un atributo para su botón en 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>

Este atributo se puede leer en su oyente:

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

Ahora, para actualizar inputText , simplemente use el clientId de clientId del botón:

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

Guárdelo en su bean, y cuando esté listo para hacerlo, actualice:

RequestContext.getCurrentInstance().update(update);

Ver también:

En mi dataTable estoy vinculando cada artículo con una tarea específica.

Al hacer clic en un botón de commandButton una lista de tareas, por lo que quiero seleccionar una tarea, actualizar una celda específica en la dataTable ( outputText con id="columnTache" ) sin actualizar el resto de mi 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>

La actualización de mi dataTable está en el bean administrado:

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