0

Hola estoy practicando el recibir datos de una BDD para luego mostrarlos en una pagina JSF, Pero el Datatable que tengo en la pagina no me devuelve nada. introducir la descripción de la imagen aquí

Luego para poder ver si esta funcionando trato de devolver un dato individual pero me sale el siguiente error: java.lang.NullPointerException Entonces no entiendo que esta pasando, he probado a parte el código de la conexión y me sale todo correcto, pero aquí no me devuelve nada al final.

Aquí esta el código del controller:

@ManagedBean
@RequestScoped
public class ProductoController {

    /**
     * Creates a new instance of productoController
     */

    private String vista = "products";
    private ProductoDAO pdao = new ProductoDAO();
    private List<ProductoModel> productos = new ArrayList<>();

    public ProductoController() {
        productos = pdao.productos();
    }

    public String getVista() {
        return vista;
    }

    public void setVista(String vista) {
        this.vista = vista;
    }

    public List<ProductoModel> getProductos() {
        return productos;
    }
    
    //Aqui deseo retornar un resultado en individual y me sale el error de Null Pointer Exception
    public String nombre(){
        return  productos.get(0).getNombre();
    }
}

También el código encargado de devolver los datos de la BDD

public class ProductoDAO {
    private  ConexionMysql conexionMysql = new ConexionMysql();
    Statement ps;
    ResultSet resultSet;
    Connection connection;
    
    public List<ProductoModel> productos(){
        ProductoModel p = new ProductoModel();
        List<ProductoModel> productoModels = new ArrayList<>();
        String sql = "select * from productos;";
        try {
            connection = conexionMysql.conexion();
            ps = connection.createStatement();
            resultSet = ps.executeQuery(sql);
            while (resultSet.next()) {                
                productoModels.add(new ProductoModel(resultSet.getInt("idProductos"),resultSet.getString("nombreProducto"),resultSet.getString("descripcionProducto")));
            }
        } catch (Exception e) {
            System.err.println(e.getMessage());
            productoModels = null;
        }
        return productoModels;
    }
}

Personalmente pienso que el problema esta en el Controller, pero no entiendo que se debe hacer.

Código del archivo HTML.

<?xml version='1.0' encoding='UTF-8' ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
      xmlns:h="http://xmlns.jcp.org/jsf/html"
      xmlns:p="http://primefaces.org/ui">
    <h:head>
        <title>Facelet Title</title>
    </h:head>
    <h:body>
        <p:commandLink action="#{productoController.getVista}">
            <p:outputLabel value="Productos"></p:outputLabel>
        </p:commandLink>
        <h:outputText value="#{productoController.nombre()}"></h:outputText>
        <h:form>
            <div class="card">
                <p:dataTable var="product" value="#{productoController.productos}">
                    <p:column headerText="Codigo">
                        <h:outputText value="#{product.idProducto}" />
                    </p:column>

                    <p:column headerText="Nombre">
                        <h:outputText value="#{product.nombre}" />
                    </p:column>

                    <p:column headerText="Descripcion">
                        <h:outputText value="#{product.descripcion}" />
                    </p:column>
                </p:dataTable>
            </div>
        </h:form>
    </h:body>
</html>

0 Answers0