style="display:inline-block;width:728px;height:90px"
data-ad-client="ca-pub-5164839828746352"
data-ad-slot="7563230308">

Obtener el objeto de un ArrayList modificarlo y actualizar los campos en la Base de Datos? estoy usando JSF 2 + postgresql.

Buenas tardes a todos quisiera ver si alguien me pudiera ejemplificar el problema que tengo, lo que estoy usando es primefaces como framework para las vistas en su showcase aparece un datatable con campos que se pueden modificar aqui el link: http://www.primefaces.org/showcase-labs/ui/datatableEditing.jsf.
Por el momento inserto los datos en objetos de Tipo Dato y los meto al ArrayList, para esto uso el ManagedBean con el cual recupero los valores de la tabla y los inserto(uso este ArrayList para llenar el datatable de primefaces) aqui el codigo que hace lo correspondiente

 public void bitacoraFromDb() throws SQLException {

        if (ds == null) {
            throw new SQLException("No se pueden obtener datos de la base proyecto");
        }

        Connection con = ds.getConnection();

        if (con == null) {
            throw new SQLException("No hay conexion con la base de datos proyecto");
        }

        PreparedStatement bitacora = con.prepareStatement("SELECT * FROM bitacora");
        ResultSet r1 = bitacora.executeQuery();

        try {

            while (r1.next()) {
                Datos dato = new Datos();
                dato.setFolio(r1.getInt("folio"));
                dato.setFechaformat(r1.getString("fecha"));
                dato.setCobertura(r1.getString("cobertura"));
                dato.setTitulo(r1.getString("titulo"));
                dato.setArchivo(r1.getString("archivo"));
                dato.setNombredbf(r1.getString("nombredbf"));
                dato.setTamano_muestra(r1.getInt("tamano_muestra"));
                dato.setFormato_calidad(r1.getString("formato_calidad"));
                dato.setEmpresa_campo(r1.getString("empresa_campo"));
                dato.setCliente(r1.getString("cliente"));
                dato.setLider_proyecto(r1.getString("lider_proyecto"));
                list.add(dato);
            }
         
        } finally {

            if (null != con) {
                con.close();
            }
            if (null != bitacora) {
                bitacora.close();
            }
            if (null != r1) {
                r1.close();
            }
        }
    }

Ahora lo que deseo hacer es, como se ve en el showcase de primefaces al teclear el boton de Editar pueda editar los campos y hacer el update en la base, mi pregunta es como puedo hacerlo?.
Tengo la idea de recuperar el objeto del arreglo pero mi pregunta es como saber si estoy modificando el objeto correcto?, y actualizando la tupla correcta? es decir que cuando seleccionan la tupla en el datatable sea ese el objeto que tenga que recuperar, para esto yo tengo el folio como la primary key de la tabla.
Alguien tiene alguna idea?

Opciones de visualización de comentarios

Seleccione la forma que prefiera para mostrar los comentarios y haga clic en «Guardar las opciones» para activar los cambios.
Imagen de roberthino10

Nadie me puede ayudar? solo

Nadie me puede ayudar? solo necesito la idea mas que nada porque se me ocurrio la solucion sucia la cual es recorrer todo el arreglo, borrar la tabla y volver a cargarlo con todos los elementos tanto actualizados como los que no, pero esa es una solución mala pero muy mala, alguien que me pueda guiar solo en la recuperación del Objeto lo que me faltaria despues de eso ya no tendria problema ya que solo seria realizar el update en la base, gracias de antemano.

Imagen de rojovizcaino

Busca el evento correcto

Mira, por lo que pude ver en la documentación y foro debes registrarte a un evento.
Checa esta entrada http://forum.primefaces.org/viewtopic.php?f=3&t=12051. Ahí mencionan el evento "onRowEdit" y al parecer debes registrarte al evento con la etiqueta

y en el atributo "listener" haces el "binding" al método de tu "backing bean". No me queda claro dentro de que elemento debes insertar la etiqueta, supongo que como hijo de la tabla debe ser suficiente, tampoco pude encontrar la firma del método ni el tipo de evento.
Lee la documentación con cuidado (que no se por qué no tienen la decencia de poner como html para poder consultarla en línea) y te ahorraras muchas horas de intento y fallo.
Suerte, y por favor no olvides definir las capas de tu aplicación, no tengo nada en contra de hacer acceso de datos desde un "backing bean" si estas haciendo una prueba de concepto pero ve definiendo tu separación e infraestructura necesaria en cuanto antes.

Imagen de roberthino10

Muchas gracias rojovizcaino

Muchas gracias rojovizcaino por contestar, yo también he intentado recuperar el evento al parecer el datatable tiene una etiqueta selection que precisamente funciona al seleccionar una tupla, gracias por preocuparte en buscar una referencia ya la habia visto pero no la tome mucho en cuenta aún cuando al parecer ahi esta la solución, yo tambien coincido en que tengo que separar en capas la aplicación, estoy leyendo como funciona jpa para poder hacer persistentes los datos y no tener que usar esta forma pero por el momento la necesito entregar lo mas rápido posible, pero tienes toda la razón de que no es la forma correcta, avisare si encuentro la solución muchas gracias de nuevo por tu ayuda y espero tener la aplicación separada lo antes posible para evitar hacerlo de esta forma.

Imagen de roberthino10

Resuelto

Hola a todos pues he resuelto el problema por si a alguien le ocurre el mismo problema lo resolví de la siguiente manera:

En primefaces estan creados las funciones que manejan los eventos de los componentes por lo tanto lo que hice fue crear un metodo que reciba como parametro el evento que necesitaba en este caso es RowEdit de la siguiente forma:

 public void  metodo(RowEdit event){
Objeto o= (Objeto)event.getObject();

//Lo que se desea realizar con el objeto en mi caso guardar en la base de datos.

}

Gracias a todos y en especial a rojovizcaino buena día.

style="display:inline-block;width:728px;height:90px"
data-ad-client="ca-pub-5164839828746352"
data-ad-slot="7563230308">