我有一个数据表,当用户选中或取消选中其中一个检查框时,我想通过编程来编辑其组件的值,这里是数据表:
<p:dataTable var="car" style="width: 270px;margin-top: 15px;margin-left: 60px" binding="#{editCommandController.hd}" value="#{editCommandController.lp}" id="carList" editable="true">
<f:facet name="header">
Stock Papiers
</f:facet>
<p:column headerText="Libéllé" style="width:70px">
<h:outputText value="#{car.libelle}" style="width: 70px;" label="Year"/>
</p:column>
<p:column headerText="Stock" style="width:40px">
<h:outputText value="#{car.stock}" label="Year"/>
</p:column>
<p:column headerText="Choisir" style="width:40px;margin: auto;">
<p:selectBooleanCheckbox id="karim" binding="#{editCommandController.tmp}" value="#{car.checked}" disabled="#{editCommandController.result gt car.stock}" >
<p:ajax listener="#{editCommandController.checkListener}"/>
</p:selectBooleanCheckbox>
</p:column>
</p:dataTable>
这是 managedBean :
public void checkListener(AjaxBehaviorEvent e) {
System.out.println("je suis "+e.getComponent().getClientId()+" utilisé : et tmp :" );
List<Papier> lp1;
lp1 = new ArrayList();
lp1 = (List<Papier>) getHd().getValue();
// getHd().se
System.out.println("lp1.size() : "+lp1.size());
Boolean a = true;
System.out.println("ce bool a = "+a);
for(int i = 0 ; i< lp1.size();i++){
System.out.println("alors le cheched est : "+lp1.get(i).getChecked());
if(lp1.get(i).getChecked()){
if(lastChecked != null){
for(int j = 0;j<lp1.size();j++){
if(lp1.get(j).getId().equals(lastChecked)){
lp1.get(j).setChecked(false);
break;
}
}
lastChecked = lp1.get(i).getId();
}else{
lastChecked = lp1.get(i).getId();
}
}
}
System.out.println("avant d'affecter voila ce quilya : ");
for(int i = 0 ; i< lp1.size();i++){
System.out.println("alors le cheched n "+i+" est : "+lp1.get(i).getChecked());
}
org.primefaces.component.datatable.DataTable editdt = new DataTable();
editdt.setValue(lp1);
setHd(editdt);
//getHd().setValue(lp1);
}
在 managedBean 我也有:
private org.primefaces.component.datatable.DataTable hd;
public org.primefaces.component.datatable.DataTable getHd() {
return hd;
}
public void setHd(org.primefaces.component.datatable.DataTable hd) {
this.hd = hd;
}
就像你在上面看到的,我使用 binding 属性将数据表与 managedBean 链接,但是当我使用
org.primefaces.component.datatable.DataTable editdt = new DataTable();
editdt.setValue(lp1);
setHd(editdt);
//getHd().setValue(lp1);
我在数据表上看不到我的更改,您知道吗,谢谢