code: public void renderRowUpdateScript(final FacesContext context, final Set<String> dirtyRows) {
          final String jsVar = resolveWidgetVar();
          final StringBuilder eval = new StringBuilder();
  
          for (final String rowKey : dirtyRows) {
              setRowVar(context, rowKey);
              final int rowIndex = rowNumbers.get(rowKey);
              // data is array of array of data
              final JavascriptVarBuilder jsRow = new JavascriptVarBuilder(null, false);
              final JavascriptVarBuilder jsStyle = new JavascriptVarBuilder(null, true);
              final JavascriptVarBuilder jsReadOnly = new JavascriptVarBuilder(null, true);
              int renderCol = 0;
              for (int col = 0; col < getColumns().size(); col++) {
                  final SheetColumn column = getColumns().get(col);
                  if (!column.isRendered()) {
                      continue;
                  }
  
                  // render data value
                  final String value = getRenderValueForCell(context, rowKey, col);
                  jsRow.appendArrayValue(value, true);
  
                  // custom style
                  final String styleClass = column.getStyleClass();
                  if (styleClass != null) {
                      jsStyle.appendRowColProperty(rowIndex, renderCol, styleClass, true);
                  }
  
                  // read only per cell
                  final boolean readOnly = column.isReadonlyCell();
                  if (readOnly) {
                      jsReadOnly.appendRowColProperty(rowIndex, renderCol, "true", true);
                  }
                  renderCol++;
              }
              eval.append("PF('").append(jsVar).append("')");
              eval.append(".updateData('");
              eval.append(rowIndex);
              eval.append("',");
              eval.append(jsRow.closeVar().toString());
              eval.append(",");
              eval.append(jsStyle.closeVar().toString());
              eval.append(",");
              eval.append(jsReadOnly.closeVar().toString());
              eval.append(");");
          }
          eval.append("PF('").append(jsVar).append("')").append(".redraw();");
          PrimeFaces.current().executeScript(eval.toString());
      }
docs: Adds eval scripts to the ajax response to update the rows dirtied by the most recent successful update request.
  
  @param context the FacesContext
  @param dirtyRows the set of dirty rows