Primefaces使用单选按钮在数据表中选择行

时间:2014-04-18 09:21:06

标签: jsf-2 primefaces datatable

我有一个带有单选按钮的数据表供选择。我知道这个案子已经在许多案件中得到了解释。但在阅读之后,我无法找到为什么我的代码无法正常工作。

这就是我所拥有的。

<p:dataTable
         value="#{personneBean.cbtb.cbsModel}"
         var="compte" id="listeComptes" paginator="false" editable="#{personneBean.isReadOnly == false}"
         emptyMessage="Pas de compte bancaire enregistré" rowIndexVar="step" selection="#{personneBean.cbtb.selectedCb}">

         <p:column headerText="Compte par défaut?" selectionMode="single" />
         <p:column headerText="Nom banque">
                <h:inputText id="nomBanque" value="#{compte.banque}" required="true" size="20" maxlength="20" onkeyup="this.value=this.value.toUpperCase();"
                       disabled="#{!userBean.userSession.autorisationCourante.cdmodi or (personneBean.isReadOnly == true)}" class="required"
                       requiredMessage="Nom banque obligatoire"/>
         </p:column>
// other column

CompteBancaireDataModel:

public class CompteBancaireDataModel extends ListDataModel<CompteBancaire>
         implements SelectableDataModel<CompteBancaire> {

   public CompteBancaireDataModel() {
   }

   public CompteBancaireDataModel(List<CompteBancaire> cbs) {
         super(cbs);
   }

   @SuppressWarnings("unchecked")
   @Override
   public CompteBancaire getRowData(String rowKey) {
         List<CompteBancaire> cbs = (List<CompteBancaire>) getWrappedData();
         for (CompteBancaire cb : cbs) {
                if(cb.getNumOrdre().equals(rowKey))
                       return cb;
         }
         return null;
   }

   @Override
   public Object getRowKey(CompteBancaire cb) {
         return cb.getNumOrdre();
   }

}

CompteBancaireTableBean:

public class CompteBancaireTableBean implements Serializable {

   /**
   *
    */
   private static final long serialVersionUID = -4307248326803236565L;

   private List<CompteBancaire> cbs;

   private CompteBancaire selectedCb;

   private CompteBancaire[] selectedCbs;

   private CompteBancaireDataModel cbsModel;

   public CompteBancaireTableBean(List<CompteBancaire> cbs) {
         this.cbs = cbs;
         cbsModel = new CompteBancaireDataModel(cbs);
   }

   public CompteBancaire getSelectedCb() {
         return selectedCb;
   }
 /* This method is called when i click on update button not when i click on a radio button, why?
 * And selectedCbs is null. This is my problem
 */
   public void setSelectedCb(CompteBancaire selectedCb) {
         this.selectedCb = selectedCb;
   }

   public CompteBancaire[] getSelectedCbs() {
         return selectedCbs;
   }


   public void setSelectedCbs(CompteBancaire[] selectedCbs) {
         this.selectedCbs = selectedCbs;
   }

   public CompteBancaireDataModel getCbsModel() {
         return cbsModel;
   }

   public void addCompteBancaire(CompteBancaire cb){
         cbs.add(cb);
         cbsModel = new CompteBancaireDataModel(cbs);
   }

   public void removeCompteBancaire(CompteBancaire cpt) {
         cbs.remove(cpt);
         cbsModel = new CompteBancaireDataModel(cbs);

   }

}

正如我在评论中所说,selectedCb在方法setSelectedCb(CompteBancaire selectedCb)中为null。

THX

0 个答案:

没有答案