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 值,这可能不是您想要的。或者它可能是....