使用managedBean jsf2 primefaces中的代码编辑数据表

时间:2012-09-01 23:04:42

标签: ajax java-ee jsf-2 datatable primefaces

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

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

如上所述,我使用绑定属性将数据表与managedBean链接但是当我使用

org.primefaces.component.datatable.DataTable editdt = new DataTable();
      editdt.setValue(lp1);
      setHd(editdt);
    //getHd().setValue(lp1);

我没有在数据表上看到我的更改 你有什么主意吗 感谢

1 个答案:

答案 0 :(得分:0)

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