PrimeFaces 扩展 - pe:sheet 不更新更改
PrimeFaces Extension - pe:sheet not Updating on Change
我不确定如何在不直接编辑单元格的情况下更新 pe:sheet。目前,当我修改一个cell时,底层列表中的数据并没有被修改,而当我修改底层列表时,前端并没有更新。我应该如何同步这两个?
这里是 HTML:
<script type="text/javascript">
function sheetExtender() {
this.cfg.enterMoves = {row: 1, col: 0};
}
</script>
<pe:sheet id="mySheet" widgetVar="mySheet" value="#{myView.objList}"
var="obj" rowKey="#{obj.listIndex}" style="color: #757575;" height="400"
showRowHeaders="true" sortOrder="ascending" width="1000" extender="sheetExtender">
<p:ajax event="change" listener="#{myView.onChange}" update="mySheet"/>
<pe:sheetcolumn headerText="X" value="#{obj.x}" colType="checkbox"/>
<pe:sheetcolumn headerText="Y" value="#{obj.y}" />
<pe:sheetcolumn headerText="Z" value="#{obj.z}" />
</pe:sheet>
更改处理程序:
public void onChange(SheetEvent event) {
Sheet sheet = event.getSheet();
List<SheetUpdate> updates = sheet.getUpdates();
SheetUpdate sheetUpdate = updates.get(0);
Integer rowId = (Integer) sheetUpdate.getRowKey();
Integer colId = (Integer) sheetUpdate.getColIndex();
String oldValue = (String) sheetUpdate.getOldValue();
String newValue = (String) sheetUpdate.getNewValue();
sheet.appendUpdateEvent(rowId, colId + 1, "DUMMY", null, "DUMMY");
sheet.commitUpdates();
}
我找不到任何特定的方法或小部件功能来使这两者保持同步。如果您知道执行此操作的正确方法,请告诉我您是如何找到它的。
谢谢!
@Gumpf 你一切都正确...你只能从 UI 前端编辑单元格。
更改支持 bean 中的值不会反映在 Sheet 中,除非您 update="sheet"
再次重绘整个 sheet。 Sheet 的全部目的是不要像可编辑数据表那样工作,如果您有一个 10x10 可编辑数据表,它每次都会在表单提交上提交 1000 个值。如果您有 20x20,那么它将无法工作,因为大多数服务器会在 1000 个表单提交项目时阻止您。
因此 Sheet 旨在一次更新一个或多个单元格以更新您的支持 bean,而无需重新绘制 sheet。您想通过更新支持 bean 值并将其反映在 Sheet 中来做的事情,唯一可行的方法是 update="sheet"
强制整个 Sheet 到 re-render 之后更新您的支持 bean 值,这可能不是您想要的。或者它可能是....
我不确定如何在不直接编辑单元格的情况下更新 pe:sheet。目前,当我修改一个cell时,底层列表中的数据并没有被修改,而当我修改底层列表时,前端并没有更新。我应该如何同步这两个?
这里是 HTML:
<script type="text/javascript">
function sheetExtender() {
this.cfg.enterMoves = {row: 1, col: 0};
}
</script>
<pe:sheet id="mySheet" widgetVar="mySheet" value="#{myView.objList}"
var="obj" rowKey="#{obj.listIndex}" style="color: #757575;" height="400"
showRowHeaders="true" sortOrder="ascending" width="1000" extender="sheetExtender">
<p:ajax event="change" listener="#{myView.onChange}" update="mySheet"/>
<pe:sheetcolumn headerText="X" value="#{obj.x}" colType="checkbox"/>
<pe:sheetcolumn headerText="Y" value="#{obj.y}" />
<pe:sheetcolumn headerText="Z" value="#{obj.z}" />
</pe:sheet>
更改处理程序:
public void onChange(SheetEvent event) {
Sheet sheet = event.getSheet();
List<SheetUpdate> updates = sheet.getUpdates();
SheetUpdate sheetUpdate = updates.get(0);
Integer rowId = (Integer) sheetUpdate.getRowKey();
Integer colId = (Integer) sheetUpdate.getColIndex();
String oldValue = (String) sheetUpdate.getOldValue();
String newValue = (String) sheetUpdate.getNewValue();
sheet.appendUpdateEvent(rowId, colId + 1, "DUMMY", null, "DUMMY");
sheet.commitUpdates();
}
我找不到任何特定的方法或小部件功能来使这两者保持同步。如果您知道执行此操作的正确方法,请告诉我您是如何找到它的。
谢谢!
@Gumpf 你一切都正确...你只能从 UI 前端编辑单元格。
更改支持 bean 中的值不会反映在 Sheet 中,除非您 update="sheet"
再次重绘整个 sheet。 Sheet 的全部目的是不要像可编辑数据表那样工作,如果您有一个 10x10 可编辑数据表,它每次都会在表单提交上提交 1000 个值。如果您有 20x20,那么它将无法工作,因为大多数服务器会在 1000 个表单提交项目时阻止您。
因此 Sheet 旨在一次更新一个或多个单元格以更新您的支持 bean,而无需重新绘制 sheet。您想通过更新支持 bean 值并将其反映在 Sheet 中来做的事情,唯一可行的方法是 update="sheet"
强制整个 Sheet 到 re-render 之后更新您的支持 bean 值,这可能不是您想要的。或者它可能是....