p:datatable Auswahl null
Ich versuche, wählbar datatable von primefaces 4.0, aber das ausgewählte Objekt immer null ist.
Ich habe müde hinzufügen rowKey
wie hier und hier gesagt, aber immer noch null...
hier mein Seite:
<p:dataTable id="appDetailTable" var="appDetail" value="#{newAppraiseBean.appDetailDataModel}"
paginator="true" rows="5" paginatorPosition="bottom" selection="#{newAppraiseBean.selectedAppDetail}"
rowKey="#{appDetail.appraiseDetailID}" selectionMode="single">
<p:ajax event="rowSelect" listener="#{newAppraiseBean.modifyAppDetail()}" oncomplete="newAppDlg.show();" update=":newAppraiseForm:newAppDetail"/>
</p:dataTable>
In meiner backing-bean:
newAppraiseBean.modifyAppDetail(): (Nur drucken Sie das ausgewählte Element)
public void modifyAppDetail(){
System.out.println("modify, selectedAppDetail:"+selectedAppDetail);
}
DataModel:
private class AppraiseDetailDataModel extends ListDataModel<Appraisedetail> implements SelectableDataModel<Appraisedetail> {
public AppraiseDetailDataModel(List<Appraisedetail> list) {
super(list);
}
@Override
public Object getRowKey(Appraisedetail t) {
return t.getAppraiseDetailID();
}
@Override
public Appraisedetail getRowData(String string) {
List<Appraisedetail> appList=(List<Appraisedetail>) getWrappedData();
for(Appraisedetail app:appList){
System.out.println(app.getAppraiseDetailID());
if(app.getAppraiseDetailID()==Integer.parseInt(string)){
return app;
}
}
return null;
}
}
Immer drucken null und ich weiß nicht, was ich bin fehlt.
Update
Habe ich vereinfacht meinen code, und legte es auf google drive.
Dies ist eine Zip-Datei von netbean-Projekt, können Sie öffnen Sie es direkt mit netbean nach dem entpacken.
Und natürlich bleibt das problem, nachdem ich meinen code vereinfachen.
- Was ist der Umfang Ihrer backing-bean?
- es ist ViewScoped.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Habe ich das problem gelöst, nachdem ich sorgfältig prüfen, meinen code.
Ich fand, dass ich nicht geben Sie die appraiseDetailID, die auch die rowKey.
Ich es nicht geben, weil ich will die DB zu generieren, die id, wenn die eingefügten Daten zu DB.
Und die Methode getRowKey bekomme immer null, weil die Daten nicht in die DB eingefügt, und natürlich die id nicht erzeugt.
Anschließend, primefaces kommen nichts während wollen getObject mit rowKey "null".
So, nachdem ich geben Sie die id selbst, alles Prima funktioniert!
Für diejenigen, die haben das gleiche problem, denken Sie daran, um anzugeben, rowKey, so dass Sie verwenden können wählbare datatable.
Versuchen Sie dies :
anstelle von dem, was Sie haben. AppraiseDetailDataModel muss auch Serializable implementieren. Entfernen Sie auch das "()" in:
Schließlich, sicherzustellen, dass die Signatur der Methode für die Zuhörer ist:
Können Sie einen Haltepunkt festlegen, dass Methode und überprüfen event.getObject(), die Referenz der ausgewählten Zeile.
War ich den Umgang mit dem gleichen problem, sogar tho ich hatte richtig identifiziert Liste der Objekt. In meinem Fall habe ich vergessen zu wickeln, die
dataTable
imform
.