我正在创建一个由任务管理器组成的应用程序。
在此任务管理器中,收件箱列表中有3个列表(收件箱,今天和星期),只显示没有类别的任务,而另外两个列表分别显示当前和本周的有或没有类别的任务。
我希望能够更改三个列表中一个任务的类别。因此,如果我更改收件箱任务的类别(不应该有类别),则应更新整个表格,并从列表中删除任务。
我调试程序并从列表中正确删除任务,但只更新了类别的单元格,而不是整个表格。如果我重新加载页面,则不会显示任务。有人知道如何更新整个表而不仅仅是一个单元格吗?感谢。
这是我的数据表的代码(被修改的单元格是带有“category”标题的最后一个单元格):
<h:form id="formTareas">
<p:dataTable id="tablaTareas" var="tarea" value="#{userBean.tasks}"
border="1" selection="#{userBean.selectedTasks}"
rowKey="#{tarea.id}" editable="true" editMode="cell"
widgetVar="tasksTable" style="text-align: center" paginator="true"
rows="8" filteredValue="#{userBean.filteredTasks}">
<p:ajax event="cellEdit" listener="#{userBean.updateTask(tarea)}"
process=":formTareas" update=":formTareas:tablaTareas" />
<p:column selectionMode="multiple"
style="width:16px;text-align:center" />
<p:column>
<f:facet name="header">#{msgs.comentario}</f:facet
<h:outputText value="#{tarea.comments}" />
</p:column>
<p:column>
<f:facet name="header">#{msgs.fechaCreacion}</f:facet>
#{userBean.formatDate(tarea.created)}
</p:column>
<p:column id="columnaPlanned" sortBy="#{tarea.planned}">
<f:facet name="header">#{msgs.fechaPlanificacion}</f:facet>
<h:outputText value="#{tarea.planificada}" />
</p:column>
<p:column headerText="category">
<p:cellEditor>
<f:facet name="output">
<h:outputText
style="color : #{tarea.isRetarded() ? 'red' : 'black'};"
value="#{userBean.getCategoryName(tarea)}" />
</f:facet>
<f:facet name="input">
<h:selectOneMenu value="#{tarea.categoryId}" style="width:96%">
<f:selectItem itemLabel="Inbox" itemValue="" />
<f:selectItems value="#{userBean.categories}" var="c"
itemValue="#{c.id}" itemLabel="#{c.name}" />
</h:selectOneMenu>
</f:facet>
</p:cellEditor>
</p:column>
</p:dataTable>
</h:form>
答案 0 :(得分:0)
我刚刚找到了问题的答案。我添加了这些行,并更新了整个dataTable:
<p:remoteCommand name="onCellEdit" update=":formTareas:tablaTareas" />
<p:dataTable id="tablaTareas" ........>
<p:ajax event="cellEdit" listener="#{userBean.updateTask(tarea)}"
oncomplete="onCellEdit()" />
这对我来说很好。