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();
}