gpt4 book ai didi

primefaces - 如何更新 Primefaces 数据表中的特定行

转载 作者:行者123 更新时间:2023-12-04 01:33:28 28 4
gpt4 key购买 nike

Primefaces 3.5,Mojarra 2.1.14。这是我的 PF 数据表,它包含一个名为“自动”的不可编辑 bool 列和可编辑的“标签”列:

<p:dataTable value="#{bean.contents}" paginator="true" var="row" 
editable="true" editMode="cell" rows="25" rowsPerPageTemplate="10,25,50" id="list">
<p:column>
<f:facet name="header"><h:outputText value="header1" /></f:facet>
<p:selectBooleanCheckbox value="#{row.automatic}" disabled="true" id="isAutomatic"></p:selectBooleanCheckbox>
</p:column>
<p:column>
<f:facet name="header"><h:outputText value="header2" /></f:facet>
<p:cellEditor>
<f:facet name="output">
<h:outputText value="#{row.label}"></h:outputText>
</f:facet>
<f:facet name="input">
<p:inputText value="#{row.label}"></p:inputText>
</f:facet>
</p:cellEditor>
</p:column>
<p:ajax event="cellEdit" process="@this" listener="#{myBean.onEditLabel}" update="isAutomatic"/>
</p:dataTable>

单元格编辑事件监听器:

public void onEditLabel(CellEditEvent event) {
Object oldValue = event.getOldValue();
Object newValue = event.getNewValue();

if(newValue != null && !newValue.equals(oldValue)) {
DataTable s = (DataTable) event.getSource();
MyEntity d = (MyEntity) s.getRowData();
try {
d.setAutomatic(false);
myDAO.save(d);
addMessage("Change saved!");
} catch (Exception ex) {
addErrorMessage("Label could not be saved!");
getFacesContext().validationFailed();
}
}
}

单元格编辑器工作,将数据发送到监听器,并正确地持久化到数据库中。 “自动”标志也由单元格编辑事件监听器清除,并正确持久保存到数据库中。问题是客户端上的“自动”复选框未更新。

我也试过

    <p:ajax event="cellEdit" process="@this" listener="#{myBean.onEditLabel}" update="list"/>

正确更新了复选框,但也会导致焦点丢失,浪费带宽。

触发 cellEdit 事件后如何仅更新特定单元格?

最佳答案

p:ajax标签在里面 p:dataTable在某些特定的行或列中没有,因此您可以轻松地更新一些相关的组件 ID。您可以在 RequestContext 的帮助下更新单元格中的特定组件。因此,删除 update来自 p:ajax并将其添加到您的 onEditLabel方法:

RequestContext.getCurrentInstance().update(
s.getClientId(FacesContext.getCurrentInstance()) +
":" + event.getRowIndex() +
":isAutomatic"
);

如您所见,单元格内组件的 id 在您分配的 id 之前具有行号。

关于primefaces - 如何更新 Primefaces 数据表中的特定行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15257554/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com