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