プライムフェイス 3.5、モハラ 2.1.14。これは私のPFデータテーブルです。「自動」という名前の編集不可能なブール値列と、編集可能な「ラベル」列が1つ含まれています。
<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 イベントが発生した後に特定のセルだけを更新するにはどうすればよいですか?