objeto inalcanzable

Iniciado por Beginner Web, 29 Julio 2019, 07:40 AM

0 Miembros y 1 Visitante están viendo este tema.

Beginner Web

Hola, tengo un problema al hacer el abm de libros, me sale que el objeto libro es inalcanzable y que fue resuelto a nulo, sera porque estoy usando todo los datos de tipo referencia? porque hice uno con puros datos primitivos y no tuve problemas, fijense en la pagina de JSF, la clase y la clase LibroBean creo que ahi tengo los errores pero no se,(SOLO EL BORRADO)  :huh:

Código (html4strict) [Seleccionar]
<?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>ABM Biblioteca</title>
   </h:head>
   <h:body>
       <h:form id="frmBiblioteca" title="ABM Biblioteca">
           <p:growl id="mensaje"/>
           <p:panel id="pnlOpciones" header="ABM Biblioteca">
               <p:menubar>
                   <p:menuitem value="Agregar Libro"/>
                   <p:menuitem value="Ordenar (A - Z)" actionListener="#{libroBean.ordenarAscendente()}" update="dtLibros"/>
                   <p:menuitem value="Ordenar (Z - A)" actionListener="#{libroBean.ordenarDescendente()}" update="dtLibros" />
                   <p:menuitem value="Buscar Libro"  />
               </p:menubar>
           </p:panel>

           <p:panelGrid id="pgAgrear" columns="2">
               <p:outputLabel id="lblCodigo" value="Código: "/>
               <p:inputNumber id="inpCodigo" value="#{libro.código}"/>
               <p:outputLabel id="lblISBN" value="ISBN: "/>
               <p:inputNumber id="inpISBN" value="#{libro.ISBN}"/>
               <p:outputLabel id="lblTitulo" value="Titulo: "/>
               <p:inputText id="inpTitulo" value="#{libro.titulo}"/>
               <p:outputLabel id="lblPaginas" value="Cantidad Paginas: "/>
               <p:inputNumber id="inpPaginas" value="#{cantPaginas}"/>
               <p:outputLabel id="lblTematica" value="Tematica: "/>
               <p:inputText id="inpTematica" value="#{libro.temática}"/>


               <!--
               private Autor autor;
               private LocalDate fechaEdicion;-->
           </p:panelGrid>

           <p:dataTable id="dtLibros" var="libros" value="#{libroBean.libros}">
               <p:column headerText="Codigo">
                   <h:outputText value="#{libros.código}"/>
               </p:column>
               <p:column headerText="ISBN">
                   <h:outputText value="#{libros.ISBN}"/>
               </p:column>
               <p:column headerText="Titulo">
                   <h:outputText value="#{libros.titulo}"/>
               </p:column>
               <p:column headerText="Cantidad Páginas">
                   <h:outputText value="#{libros.cantPaginas}"/>
               </p:column>
               <p:column headerText="Tematica">
                   <h:outputText value="#{libros.temática}"/>
               </p:column>
               <p:column headerText="Autor">
                   <h:outputText value="#{libros.autor.nombre} #{libros.autor.apellido}"/>
               </p:column>
               <p:column headerText="Fecha publicación">
                   <h:outputText value="#{libros.fechaEdicion.dayOfMonth}/#{libros.fechaEdicion.monthValue}/#{libros.fechaEdicion.year}"/>
               </p:column>
               <p:column headerText="Acción">
                   <p:commandButton id="btnEliminar" value="Eliminar" actionListener="#{libroBean.borrar(libros)}" update="dtLibros"/>
               </p:column>
           </p:dataTable>
       </h:form>
   </h:body>
</html>




Código (java) [Seleccionar]
/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
package apliacion.dao;

import aplicacion.modelo.dominio.Libro;
import java.util.List;

/**
*
* @author Ana Kéldysh
*/
public interface ILibroDAO{
   
   public void agregar(Libro nuevo);
   
   public void borrar(Libro borrado);
   
   public void modificar(Libro modificado);
   
   public void ordenarAscendente();
   
   public void ordenarDescendente();
   
   public List<Libro> buscarLibros(String buscado);
   
   public List<Libro> mostrarLibros();
   
}


Código (java) [Seleccionar]
/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
package aplicacion.controlador.bean;

import apliacion.dao.ILibroDAO;
import aplicacion.dao.imp.ILibroDAOImp;
import aplicacion.modelo.dominio.Libro;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
import javax.annotation.PostConstruct;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;

/**
*
* @author Ana Kéldysh
*/
@ManagedBean
@SessionScoped
public class LibroBean implements Serializable{

   private Libro libro;
   private ILibroDAO libroDAO;
   private List<Libro> libros;

   /**
    * Creates a new instance of LibroBean
    */
   public LibroBean() {
       libroDAO = new ILibroDAOImp();
       libros = new ArrayList<>();
   }

   public void generarLibros() {
       libros = libroDAO.mostrarLibros();
   }

   @PostConstruct
   public void iniciarLibro() {
       libro = new Libro();
       generarLibros();
   }

   public void agregar(Libro nuevo) {
       libroDAO.agregar(nuevo);
   }

   public void borrar(Libro borrado) {
       libroDAO.borrar(borrado);
   }

   public void modificar(Libro modificado) {
       libroDAO.modificar(modificado);
   }

   public void ordenarAscendente() {
       libroDAO.ordenarAscendente();
   }

   public void ordenarDescendente() {
       libroDAO.ordenarDescendente();
   }

   public List<Libro> buscarLibros(String buscado) {
       return libroDAO.buscarLibros(buscado);
   }

   public List<Libro> mostrarLibros() {
       return libroDAO.mostrarLibros();
   }

   public Libro getLibro() {
       return libro;
   }

   public void setLibro(Libro libro) {
       this.libro = libro;
   }

   public ILibroDAO getLibroDAO() {
       return libroDAO;
   }

   public void setLibroDAO(ILibroDAO libroDAO) {
       this.libroDAO = libroDAO;
   }

   @Override
   public String toString() {
       return "LibroBean{" + "libro=" + libro + ", libroDAO=" + libroDAO + ", libros=" + libros + '}';
   }

   public List<Libro> getLibros() {
       return libros;
   }

   public void setLibros(List<Libro> libros) {
       this.libros = libros;
   }

}


Código (java) [Seleccionar]
/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
package aplicacion.controlador.bean;

import apliacion.dao.ILibroDAO;
import aplicacion.dao.imp.ILibroDAOImp;
import aplicacion.modelo.dominio.Autor;
import aplicacion.modelo.dominio.Libro;
import java.time.LocalDate;

/**
*
* @author Ana Kéldysh
*/
public class Test {

   public static void main(String[] args) {

       ILibroDAO lista = new ILibroDAOImp();
       lista.mostrarLibros().forEach((a) -> {
           System.out.println(a.getCódigo());
       });
       System.out.println("Despues de borrar");
       lista.borrar(new Libro(1, 1000, "Java Como Programar", 1000, "Programación", new Autor(), LocalDate.now()));
       lista.mostrarLibros().forEach((a) -> {
           System.out.println(a.getCódigo());
       });
   }
}



Código (java) [Seleccionar]
/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
package aplicacion.dao.imp;

import apliacion.dao.ILibroDAO;
import aplicacion.modelo.dominio.Libro;
import aplicacion.modelo.util.ListaLibros;
import java.io.Serializable;
import java.util.List;

/**
*
* @author Ana Kéldysh
*/
public class ILibroDAOImp implements ILibroDAO, Serializable {

   private ListaLibros libros;

   public ILibroDAOImp() {
       libros = new ListaLibros();
   }

   @Override
   public void agregar(Libro nuevo) {
       libros.agregar(nuevo);
   }

   @Override
   public void borrar(Libro borrado) {
       libros.borrar(borrado);
   }

   @Override
   public void modificar(Libro modificado) {
       libros.modificar(modificado);
   }

   @Override
   public void ordenarAscendente() {
       libros.ordenarAscendente();
   }

   @Override
   public void ordenarDescendente() {
       libros.ordenarDescendente();
   }

   @Override
   public List<Libro> buscarLibros(String buscado) {
       return libros.buscarLibros(buscado);
   }

   @Override
   public List<Libro> mostrarLibros() {
       return libros.getLibros();
   }

}




Código (java) [Seleccionar]
/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
package aplicacion.modelo.dominio;

import java.io.Serializable;

/**
*
* @author Ana Kéldysh
*/
public class Autor implements Serializable {

   private String nombre;
   private String apellido;
   private Integer edad;
   private String nacionalidad;

   public Autor() {
   }

   public Autor(String nombre, String apellido, Integer edad, String nacionalidad) {
       this.nombre = nombre;
       this.apellido = apellido;
       this.edad = edad;
       this.nacionalidad = nacionalidad;
   }

   public String getNacionalidad() {
       return nacionalidad;
   }

   public void setNacionalidad(String nacionalidad) {
       this.nacionalidad = nacionalidad;
   }

   public String getNombre() {
       return nombre;
   }

   public void setNombre(String nombre) {
       this.nombre = nombre;
   }

   public String getApellido() {
       return apellido;
   }

   public void setApellido(String apellido) {
       this.apellido = apellido;
   }

   public Integer getEdad() {
       return edad;
   }

   public void setEdad(Integer edad) {
       this.edad = edad;
   }

   @Override
   public String toString() {
       return "Autor{" + "nombre=" + nombre + ", apellido=" + apellido + ", edad=" + edad + ", nacionalidad=" + nacionalidad + '}';
   }

}




Código (java) [Seleccionar]
/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
package aplicacion.modelo.dominio;

import java.io.Serializable;
import java.time.LocalDate;

/**
*
* @author Ana Kéldysh
*/
public class Libro implements Serializable {

   private Integer código;
   private Integer ISBN;
   private String titulo;
   private Integer cantPaginas;
   private String temática;
   private Autor autor;
   private LocalDate fechaEdicion;

   public Libro() {
   }

   public Libro(Integer código, Integer ISBN, String titulo, Integer cantPaginas, String temática, Autor autor, LocalDate fechaEdicion) {
       this.código = código;
       this.ISBN = ISBN;
       this.titulo = titulo;
       this.cantPaginas = cantPaginas;
       this.temática = temática;
       this.autor = autor;
       this.fechaEdicion = fechaEdicion;
   }

   public Integer getCódigo() {
       return código;
   }

   public void setCódigo(Integer código) {
       this.código = código;
   }

   public Integer getISBN() {
       return ISBN;
   }

   public void setISBN(Integer ISBN) {
       this.ISBN = ISBN;
   }

   public String getTitulo() {
       return titulo;
   }

   public void setTitulo(String titulo) {
       this.titulo = titulo;
   }

   public Integer getCantPaginas() {
       return cantPaginas;
   }

   public void setCantPaginas(Integer cantPaginas) {
       this.cantPaginas = cantPaginas;
   }

   public String getTemática() {
       return temática;
   }

   public void setTemática(String temática) {
       this.temática = temática;
   }

   public Autor getAutor() {
       return autor;
   }

   public void setAutor(Autor autor) {
       this.autor = autor;
   }

   public LocalDate getFechaEdicion() {
       return fechaEdicion;
   }

   public void setFechaEdicion(LocalDate fechaEdicion) {
       this.fechaEdicion = fechaEdicion;
   }

   @Override
   public String toString() {
       return "Libro{" + "c\u00f3digo=" + código + ", ISBN=" + ISBN + ", titulo=" + titulo + ", cantPaginas=" + cantPaginas + ", tem\u00e1tica=" + temática + ", autor=" + autor + ", fechaEdicion=" + fechaEdicion + '}';
   }

}



Código (java) [Seleccionar]
/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
package aplicacion.modelo.util;

import aplicacion.modelo.dominio.Autor;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;

/**
*
* @author Ana Kéldysh
*/
public class ListaAutores implements Serializable {

   private List<Autor> autores;

   public ListaAutores() {
       autores = new ArrayList<>();
       autores.add(new Autor("Vanessa", "Navarro", 34, "Argentina"));
       autores.add(new Autor("Ana", "Kéldysh", 15, "Argentina"));
   }

   public List<Autor> getAutores() {
       return autores;
   }

   public void setAutores(List<Autor> autores) {
       this.autores = autores;
   }

   @Override
   public String toString() {
       return "ListaAutores{" + "autores=" + autores + '}';
   }

}



Código (java) [Seleccionar]
/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
package aplicacion.modelo.util;

import aplicacion.modelo.dominio.Libro;
import java.io.Serializable;
import java.time.LocalDate;
import java.util.ArrayList;
import java.util.Comparator;
import java.util.List;
import javax.faces.application.FacesMessage;
import javax.faces.context.FacesContext;

/**
*
* @author Ana Kéldysh
*/
public class ListaLibros implements Serializable {

   private List<Libro> libros;
   private ListaAutores autores;
   private List<Libro> auxiliar;

   public ListaLibros() {
       libros = new ArrayList<>();
       autores = new ListaAutores();
       auxiliar = new ArrayList<>();
       libros.add(new Libro(1, 1000, "Java Como Programar", 1000, "Programación", autores.getAutores().get(0), LocalDate.now()));
       libros.add(new Libro(2, 2000, "C++", 1000, "Programación", autores.getAutores().get(1), LocalDate.now()));
       libros.add(new Libro(3, 3000, "Python", 1000, "Programación", autores.getAutores().get(1), LocalDate.now()));
   }

   public void agregar(Libro nuevo) {
       libros.add(nuevo);
       FacesContext fc = FacesContext.getCurrentInstance();
       fc.addMessage(null, new FacesMessage("Agregado con exito!!"));
   }

   public void borrar(Libro borrado) {
       boolean encontrado = false;
       for (int i = 0; i < libros.size() && !encontrado; i++) {
           if (libros.get(i).getCódigo().equals(borrado.getCódigo())) {
               libros.remove(i);
               encontrado = true;
           }
       }
       if (encontrado) {
           FacesContext fc = FacesContext.getCurrentInstance();
           fc.addMessage(null, new FacesMessage("Borrado con exito!!"));
       }
   }

   public void modificar(Libro modificado) {
       boolean encontrado = false;
       for (int i = 0; i < libros.size() && !encontrado; i++) {
           if (libros.get(i).getCódigo().equals(modificado.getCódigo())) {
               libros.set(i, modificado);
               encontrado = true;
           }
       }
       if (encontrado) {
           FacesContext fc = FacesContext.getCurrentInstance();
           fc.addMessage(null, new FacesMessage("Modificado con exito!!"));
       }
   }

   public void ordenarAscendente() {
       libros.sort(Comparator.comparing(Libro::getCódigo));
   }

   public void ordenarDescendente() {
       libros.sort(Comparator.comparing(Libro::getCódigo).reversed());
   }

   public List<Libro> buscarLibros(String buscado) {
       auxiliar.clear();
       for (int i = 0; i < libros.size(); i++) {
           if (libros.get(i).getTitulo().startsWith(buscado)) {
               auxiliar.add(libros.get(i));
           }
       }
       return auxiliar;
   }

   public List<Libro> getLibros() {
       auxiliar.clear();
       for (int i = 0; i < libros.size(); i++) {
           auxiliar.add(libros.get(i));
       }
       return auxiliar;
   }

   public void setLibros(List<Libro> libros) {
       this.libros = libros;
   }

   @Override
   public String toString() {
       return "ListaLibros{" + "libros=" + libros + ", autores=" + autores + '}';
   }

   public ListaAutores getAutores() {
       return autores;
   }

   public void setAutores(ListaAutores autores) {
       this.autores = autores;
   }

   public List<Libro> getAuxiliar() {
       return auxiliar;
   }

   public void setAuxiliar(List<Libro> auxiliar) {
       this.auxiliar = auxiliar;
   }

}



7w7