Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jsf-2/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jsf 2 Primefaces使用单选按钮在datatable中选择行_Jsf 2_Primefaces_Datatable - Fatal编程技术网

Jsf 2 Primefaces使用单选按钮在datatable中选择行

Jsf 2 Primefaces使用单选按钮在datatable中选择行,jsf-2,primefaces,datatable,Jsf 2,Primefaces,Datatable,我有一个带有单选按钮的数据表。我知道这个案例已经在很多案例中得到了解释。但读完之后,我不明白为什么我的代码不起作用 这就是我所拥有的 <p:dataTable value="#{personneBean.cbtb.cbsModel}" var="compte" id="listeComptes" paginator="false" editable="#{personneBean.isReadOnly == false}" emptyM

我有一个带有单选按钮的数据表。我知道这个案例已经在很多案例中得到了解释。但读完之后,我不明白为什么我的代码不起作用

这就是我所拥有的

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

}
公共类CompteBancaireDataModel扩展了ListDataModel
实现SelectableDataModel{
公共CompteBancaireDataModel(){
}
公共公司模式(cbs列表){
超级(哥伦比亚广播公司);
}
@抑制警告(“未选中”)
@凌驾
公共CompteBancaire getRowData(字符串rowKey){
List cbs=(List)getWrappedData();
对于(CompteBancaire cb:cbs){
if(cb.getNumOrdre().equals(rowKey))
返回cb;
}
返回null;
}
@凌驾
公共对象getRowKey(CompteBancaire cb){
返回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);

   }

}
公共类CompteBancaireTableBean实现可序列化{
/**
*
*/
私有静态最终长serialVersionUID=-4307248326803236565L;
私人名单哥伦比亚广播公司;
私人公司选择CB;
私人公司[]选择CBS;
私人公司模型;
公共CompteBancaireTableBean(列出cbs){
this.cbs=cbs;
cbs模型=新的CompteBancaireDataModel(cbs);
}
公共CompteBancaire getSelectedCb(){
返回所选的cb;
}
/*当我点击更新按钮时调用此方法,而不是当我点击单选按钮时调用,为什么?
*selectedCbs为空。这是我的问题
*/
公共作废设置选择CB(CompteBancaire选择CB){
this.selectedCb=selectedCb;
}
公共CompteBancaire[]getSelectedCbs(){
返回所选的CBS;
}
公共作废设置选择的CBS(CompteBancaire[]选择的CBS){
this.selectedCbs=selectedCbs;
}
公共CompteBancaireDataModel getCbsModel(){
回归模型;
}
公共无效添加公司代码(公司代码cb){
cbs.add(cb);
cbs模型=新的CompteBancaireDataModel(cbs);
}
公共无效删除公司(公司cpt){
cbs.remove(cpt);
cbs模型=新的CompteBancaireDataModel(cbs);
}
}
正如我在注释中告诉它的,selectedCb在方法setSelectedCb(CompteBancaire selectedCb)中为空


Thx

检查
getRowData
是否真的获取数据,或者在返回cb之前通过put sysout始终返回null和
返回null
如果它总是返回null,请检查您是否设置了每张cd的
numOrdre
。应用程序不会传递到getRowData!所以我遗漏了一些东西,但什么?^^你们能定义datatable的rowKey吗?你们所说的定义是什么意思?我不明白什么是划船。就像primaryKey一样?如果是,那么我的rowKey是numOrdre。