Jsf Primefaces CellEditEvent为getOldValue和getNewValue方法返回相同的对象

Jsf Primefaces CellEditEvent为getOldValue和getNewValue方法返回相同的对象,jsf,primefaces,datatable,Jsf,Primefaces,Datatable,生成数据表的代码 public DataTable getDataTable(DataTable myDataTable,List<? extends ExcelTableModel> value,List<String> attributes){ FacesContext fc = FacesContext.getCurrentInstance(); Application application = fc.getApplicatio

生成数据表的代码

  public DataTable getDataTable(DataTable myDataTable,List<? extends ExcelTableModel> value,List<String> attributes){
    FacesContext fc = FacesContext.getCurrentInstance();
            Application application = fc.getApplication();
            ExpressionFactory ef = application.getExpressionFactory();
            ELContext elc = fc.getELContext(); 

                int i=0;
                for(String attribute:attributes){
                ValueExpression valueExp = ef.createValueExpression(elc, "#{mydata." + attribute + "}", Object.class);



                HtmlOutputText output = (HtmlOutputText)application.createComponent(HtmlOutputText.COMPONENT_TYPE );
                output.setValueExpression("value", valueExp);
                output.setId(attribute+"output"+i);



                InputText input = (InputText)application.createComponent(InputText.COMPONENT_TYPE );
                input.setValueExpression("value", valueExp);
                input.setStyle("color:black");
                input.setId(attribute+"input"+i);


                CellEditor editor = (CellEditor)application.createComponent(CellEditor.COMPONENT_TYPE );

                editor.getFacets().put("output", output);
                editor.getFacets().put("input", input); 

                Column dataColumn = new Column();
                dataColumn.setHeaderText(attribute);
                dataColumn.getChildren().add(editor);

            myDataTable.getChildren().add(dataColumn);
             i++;
       }
    return myDataTable;
}
<h:form id="form">    
    <p:dataTable 
              id="table" 
              var="mydata" 
              value="#{dynamicColumnBean.linkedList}" 
              binding="#{dynamicColumnBean.myDataTable}" 
              editable="true" 
              editMode="cell" 
              widgetVar="aList" 
              tableStyle="width:auto" 
              rowIndexVar="rowIndex">       

<p:ajax event="cellEdit" listener="#{dynamicColumnBean.onCellEdit}" update=":form:table"/>
    </p:dataTable>
 </h:form>

每件事都可以工作,但当我检查onCellEdit事件方法时,它会为getOldValue和getNewValue返回相同的值,即使我为它们都获得相同的id。我想我在为datatable生成组件时遗漏了一些东西。请帮助我解决我在这里遗漏的问题,提前谢谢。

如果您使用xhtml创建所有内容,它是否有效?当我使用xhtml创建时,它可以完美地工作。当我从页面查看xhtml源代码时,上面的代码也创建了相同的html输出、标记和脚本,就像从xhtml生成的一样。但我总是得到相同的新对象和旧对象,即使它们的id相同,我认为事件将相同的组件带到支持bean。
public void onCellEdit(CellEditEvent event) {

        Object oldValue = event.getOldValue();
        Object newValue = event.getNewValue();

    }