私はprimefacesをdatatableにしています。セル編集で特定の列または行全体を更新したいと思います。編集されたセルの値は、同じ行の他の列の値を決定します。Primefaces datatable、update row oncelledit
私はonCellEdit方法からコンポーネントが、ノー成功を更新しようとしました:
<p:column id="tgtType" styleClass="mapDetsTblColTypeTgt" headerText="Target Type">
<p:cellEditor id="editor" rendered="...">
<f:facet name="output">
<h:outputText value="..." />
</f:facet>
<f:facet name="input">
<p:inputText value="..." styleClass="mapDetsTblInput" onselect="this.value=this.value" />
</f:facet>
</p:cellEditor>
<h:outputText value="..." rendered="!..."/>
</p:column>
任意のアイデア:
String targetTypeColumn = ((DataTable)event.getSource()).getClientId(FacesContext.getCurrentInstance()) +
":" + event.getRowIndex() + ":editor";
RequestContext.getCurrentInstance().update(targetTypeColumn);
列は、セルエディタを持っていますか?
これは時間の無駄ですので、私はdatatable全体を更新したくありません。
編集:
私は、セル編集
<p:dataTable id="mapperDetailsTable" styleClass="mapperDetailsTable" widgetVar="mapperDetailsTable"
..... >
<p:ajax event="cellEdit" listener="#{bean.onCellEdit}" update=":mapperDetailsForm:growlMapper mapperDetailsTable"
oncomplete="handleCellEdit(args);" />
......
が、効果なしの時のデータテーブルを更新しようとしました。次のセルは更新されません。私は何を書きましたか?私は編集されたセルでautoCompleteを使っていますので、私は更新属性を持っていません。
<p:cellEditor rendered="#{guiUtils.isEditable(mapperCtrl, fieldMapping)}">
<f:facet name="output">
<h:outputText value="#{fieldMapping.fieldNameTgt}"/>
</f:facet>
<f:facet name="input">
<p:autoComplete value="#{fieldMapping.fieldNameTgt}" completeMethod="#{mapperCtrl.dmUtils.completeTargetFields}" >
<p:ajax event="itemSelect" listener="#{mapperCtrl.action}" process="mapperDetailsTable"/>
<p:ajax event="change" listener="#{mapperCtrl.action}" process="mapperDetailsTable"/>
</p:autoComplete>
</f:facet>
</p:cellEditor>
EDIT2:
私がチェックし、値がリスト内の正しい要素に更新されます。
私はこのスレッド(リロードデータテーブル)からソリューションを使用しました:Updating entire <p:dataTable> on complete of <p:ajax event="cellEdit"> すべてが問題ありません。値は正しく更新されますが、行やセルのみを更新する方法はありますか?
EDID 3:
私はボタン電池でクリックがリロードテーブルなしに更新された後、私はのcommandButton
<p:column>
.....
<p:commandButton value="updateTgtRow" id="updateTgtRow" process="@this" ajax="true" immediate="true" update="outputType inputType"/>
</p:column>
を使用してセルを更新できることが分かりました。しかし、セル編集後にそのボタンをクリックする方法はありますか?私がoncompleteを追加したとき、セル編集は動作しません。セルは読み取り専用です。何か案が?
<p:ajax event="cellEdit" listener="#{mapperCtrl.onCellEdit}"
process="@this" oncomplete="#(updateTgtRow).click()"/>
特に 'cellEdit'イベント中の' update = "tableId"のデフォルト動作は、すでに現在の行だけを更新するということです。あなたは実際にそれを試してみましたか/調査しましたか?関連:http://stackoverflow.com/questions/19548838(実際には逆の方法を求めています) – BalusC
@BalusC: 'cellEdit'のデフォルトは現在の**行**を更新することですか? (試していない、行とセルの編集を使用しないでください) – Kukeltje
値はリストの正しい要素で更新されます。 – skoczo