0

我有一个数据表,当用户选中或取消选中其中一个检查框时,我想通过编程来编辑其组件的值,这里是数据表:

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

我在数据表上看不到我的更改,您知道吗,谢谢

4

1 回答 1

0

您不会在客户端更新数据表以反映您在服务器端所做的更改。update= "carList"使用ajax 事件通过 ajax 刷新数据表。

于 2012-09-03T08:02:44.647 回答