cellValueを同じ行に更新したいとします。 私はBalusCのsugestionsに従いました Updating entire <p:dataTable> on complete of <p:ajax event="cellEdit"><p:ajax event = "cellEdit">完了した行を更新する
すべてのコードが2つのリクエストを実行した後。セカンド・ワンはフル・ページ・リロードを行い、すべてのデータがリセットされます。
また、この提案に続いて<p:remoteCommand name="updateTable" process="@this" update="kAbnrTbl" />
を試しました。ここで Using a p:remoteCommand to update a p:dataTable
JSFページです:
<h:form id="kalkEditForm">
<p:outputPanel id="dropArea">
<p:remoteCommand name="updateTable" update="kAbnrTbl" />
<p:dataTable id="kAbnrTbl" value="#{tableBean.data}" var="data" editable="true" editMode="cell">
<p:ajax event="cellEdit" listener="#{tableBean.onCellEdit}" oncomplete="updateTable()"/>
<p:column headerText="Col1">
<p:cellEditor>
<f:facet name="output"><h:outputText value="#{data.col1}" /></f:facet>
<f:facet name="input"><p:inputText value="#{data.col1}" /></f:facet>
</p:cellEditor>
</p:column>
<p:column headerText="Col2">
<h:outputText value="#{data.col2}" />
</p:column>
</p:dataTable>
</p:outputPanel>
</h:form>
そして、ここで豆:
@ManagedBean(name="tableBean")
@ViewScoped
public class TableBean {
public TableBean() {
RowData entry = new RowData("a1", "b1");
entries.add(entry);
entry = new RowData("a2", "b2");
entries.add(entry);
entry = new RowData("a3", "b3");
entries.add(entry);
}
public class RowData {
private String col1;
private String col2;
public RowData(String col1, String col2) {
this.col1 = col1;
this.col2 = col2;
}
public String getCol1() {
return col1;
}
public void setCol1(String col1) {
this.col1 = col1;
}
public String getCol2() {
return col2;
}
public void setCol2(String col2) {
this.col2 = col2;
}
}
private final ArrayList<RowData> entries = new ArrayList<RowData>();
public List<RowData> getData() {
return entries;
}
public void onCellEdit(CellEditEvent event) {
final DataTable dataTable = (DataTable)event.getComponent();
RowData data = (RowData) dataTable.getRowData();
data.setCol2("changed");
}
}
は、私がコードで何が間違っている見当がつかない。なぜ<p:remoteCommand ...
第2の要求を実行するのですか?バック開始位置まで
Primface 5.3:使用
。 <p:remoteCommand name="updateTable" update="kAbnrTbl" />
ハックを使用しない場合は正常に動作しますが、refreshButtonを押す必要があります。 ハックを使用すると、2つのリクエストとフルページのリロードがあります。私が見落とす小さなタイプミスや何かがあるはずです。
ここでコードはハックなしです。
<h:form id="kalkEditForm">
<p:outputPanel id="dropArea">
<!-- <p:remoteCommand name="updateTable" update="kAbnrTbl" /> -->
<p:dataTable id="kAbnrTbl" value="#{tableBean.data}" var="data" editable="true" editMode="cell">
<p:ajax event="cellEdit" listener="#{tableBean.onCellEdit}" update="kAbnrTbl"/>
<!-- <p:ajax event="cellEdit" listener="#{tableBean.onCellEdit}" oncomplete="updateTable()"/> -->
<p:column headerText="Col1">
<p:cellEditor>
<f:facet name="output"><h:outputText value="#{data.col1}" /></f:facet>
<f:facet name="input"><p:inputText value="#{data.col1}" /></f:facet>
</p:cellEditor>
</p:column>
<p:column headerText="Col2">
<h:outputText value="#{data.col2}" />
</p:column>
</p:dataTable>
</p:outputPanel>
<p:commandButton id="refreshButton" value="Redisplay" update="kAbnrTbl" />
</h:form>
私は避けたいものです。私はなぜremoteCommandがフルページリロードを引き起こすのだろうかと思います。 – inog
私たちのクライアントは、鉛筆が好きではなく、2回クリックしたくありません。だからcellEditが好きです。私はあなたの提案を試みましたが、リスナーの 'tableBean.onCellEdit'は呼び出されませんでした。 – inog
別のページでは、p:inplaceを使用してセルの値を更新しました。 \t \t \t \t \t \t \t \t \t \t \t \t H:selectOneMenu> \t ' –
BrunoLima
'