Estoy tratando de utilizar seleccionable datatable de primefaces 4.0, pero el objeto seleccionado es siempre null.
Ya me he cansado agregar rowKey como aquí y aquí dijo, pero todavía se null…

aquí está mi página:

<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>

En mi backing bean:

newAppraiseBean.modifyAppDetail(): (Sólo se muestra el elemento seleccionado)

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

}

Siempre de impresión null y no sé lo que me estoy perdiendo.

Actualización

He simplificado mi código y ponerlo en google drive.

Este es un archivo comprimido de netbean proyecto, puede abrirlo directamente con netbean después de descomprimirlo.

Y, por supuesto, el problema sigue siendo, después de que yo simplificar mi código.

  • ¿Cuál es el alcance de su backing bean?
  • es ViewScoped.
InformationsquelleAutor nosnhoj | 2014-04-02

3 Comentarios

  1. 4

    He resuelto el problema después de que me revise cuidadosamente mi código.

    He encontrado que no me especifique el appraiseDetailID, que es también el rowKey.

    No lo especifiqué porque quiero DB para generar el id cuando los datos incorporados a la base de datos.
    Y el método getRowKey siempre obtener nulo debido a que los datos no se han insertado en DB, y, por supuesto, la identificación no ha generado.

    Posteriormente, primefaces conseguir nada, mientras que él quiere getObject con rowKey «null».

    Así que, después de especificar el id de mí mismo, todo funciona bien!

    Para aquellos que tienen el mismo problema, recuerde especificar rowKey de modo que usted puede utilizar seleccionable datatable.

    • Tengo un problema similar. He puesto el rowKey con una clave Principal que se obtiene de las tablas de MySQL. Aún cuando trato de seleccionar y exportar puedo conseguir las filas de la primera. stackoverflow.com/questions/30054708/…
  2. 1

    Intente esto :

    if(app.getAppraiseDetailID().toString().equals(rowkey)) { ...

    lugar de lo que tienes. AppraiseDetailDataModel también deben implementar Serializable. También quitar los «()» en:

    listener="#{newAppraiseBean.modifyAppDetail()}"

    Por último, asegúrese de que la firma del método para el oyente es:

    public void modifyAppDetail(SelectEvent event)

    Puede establecer un punto de interrupción en el método e inspeccionar evento.getObject(), la cual debe hacer referencia a la fila seleccionada.

    • Hola argh, lo siento por responder últimamente. Sin embargo, hice lo que me dijiste y el problema sigue. ¿Tienes otros pensamientos? Gracias!
    • podría usted mostrar mi la fuente de todo el backing bean, tal vez ? Yo uso todo el tiempo, y funciona muy bien para mí.
    • Gracias, he simplificar el código y ponerlo en google drive: drive.google.com/file/d/0B5ye4CP3K_a3blBnbVk3cmNjMEE/… por CIERTO, este es un archivo comprimido de netbean proyecto, puede abrirlo directamente con netbean después de descomprimirlo. Y, por supuesto, el problema sigue siendo, después de que yo simplificar mi código. Gracias de nuevo.
    • Gracias argh1969, he encontrado la solución. Resulta que el rowKey era nula. Funciona bien después de que me puse el rowKey. Gracias de todos modos.
  3. 1

    Yo estaba tratando con el mismo problema, incluso aunque yo había identificado correctamente lista de objetos. En mi caso se me olvidó envuelva el dataTable en un form.

    <h:form>
        <p:dataTable> ... </p:dataTable>
    </h:form>

Dejar respuesta

Please enter your comment!
Please enter your name here