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。