9
respostas

Gravando dados do livro

Oi, Quando eu mando gravar o formulário o ISBN e o preço não estão sendo gravados, alguém sabe me dizer o por que?

Olhei e os geters e seters estão certos, antes estava funcionando, não sei o que houve.

Eles estão declarados assim:

<p:outputLabel value="ISBN:" for="isbn" />
<p:inputMask id="isbn" value="#{livroBean.livro.isbn}"
    validator="#{livroBean.comecaComDigitoUm}" mask="999-9-99-999999-9"/>

<p:outputLabel value="Preço:" for="preco" />
<p:inputNumber id="preco" value="#{livroBean.livro.preco}" symbol="R$ " decimalSeparator="," thousandSeparator="."/>

E eu alterei o link de remoção do autor para um botão, só que não funciona mais:

Link

<p:commandLink value="X"  action="#{livroBean.removerAutorDoLivro(autor)}" update="tabelaAutores" process="@this" />

Botão

<p:commandButton icon="fa fa-fw fa-remove" action="#{livroBean.removerAutorDoLivro(autor)}" update="tabelaAutores" process="@this" type="button"/>
9 respostas

Lucas, de boa ?

Mostra pra gente sua classe só pra gente ter uma ideia de como está ?

Oi Matheus,

Segue as classes livro e livroBean

LivroBean

public class LivroBean implements Serializable {

    private static final long serialVersionUID = 1L;

    private Livro livro = new Livro();

    private Integer autorId;

    public LivroDataModel getLivroDataModel() {
        return livroDataModel;
    }

    public void setLivroDataModel(LivroDataModel livroDataModel) {
        this.livroDataModel = livroDataModel;
    }

    private List<Livro> livros;

    private LivroDataModel livroDataModel = new LivroDataModel();

    public void setLivro(Livro livro) {
        this.livro = livro;
    }

    public void setAutorId(Integer autorId) {
        this.autorId = autorId;
    }

    public Integer getAutorId() {
        return autorId;
    }

    public Livro getLivro() {
        return livro;
    }

    public List<Livro> getLivros() {
         DAO<Livro> dao = new DAO<Livro>(Livro.class);
         if(this.livros == null) {
             this.livros = dao.listaTodos();             
         }
         return livros;
    }

    public List<Autor> getAutores() {
        return new DAO<Autor>(Autor.class).listaTodos();
    }

    public List<Autor> getAutoresDoLivro() {
        return this.livro.getAutores();
    }

    public void gravarAutor() {
        Autor autor = new DAO<Autor>(Autor.class).buscaPorId(this.autorId);
        this.livro.adicionaAutor(autor);
        System.out.println("Escrito por: " + autor.getNome());
    }

    public void gravar() {
        System.out.println("Gravando livro " + this.livro.getTitulo());

        if (livro.getAutores().isEmpty()) {
            FacesContext.getCurrentInstance().addMessage("autor",
                    new FacesMessage("Livro deve ter pelo menos um Autor."));
            return;
        }

        DAO<Livro> dao = new DAO<Livro>(Livro.class);
        if (this.livro.getId() == null) {
            dao.adiciona(this.livro);
            this.livros = dao.listaTodos();
        } else {
            dao.atualiza(this.livro);
        }

        this.livro = new Livro();
    }

    public void carregar(Livro livro) {
        System.out.println("Carregando livro " + livro.getTitulo());
        this.livro = livro;
    }

    public void carregaLivroPeloId() {
        Integer id = this.livro.getId();
        this.livro = new DAO<Livro>(Livro.class).buscaPorId(id);
        if (this.livro == null) {
            this.livro = new Livro();
        }

    }

    public void remover(Livro livro) {
        System.out.println("Removendo livro " + livro.getTitulo());
        new DAO<Livro>(Livro.class).remove(livro);
    }

    public void removerAutorDoLivro(Autor autor) {
        this.livro.removeAutor(autor);
    }

    public String formAutor() {
        System.out.println("Chamanda do formulário do Autor.");
        return "autor?faces-redirect=true";
    }

    public void comecaComDigitoUm(FacesContext fc, UIComponent component,
            Object value) throws ValidatorException {

        String valor = value.toString();
        if (!valor.startsWith("1")) {
            throw new ValidatorException(new FacesMessage(
                    "ISBN deveria começar com 1"));
        }

    }

    public boolean precoEhMenor(Object valorColuna, Object filtroDigitado, Locale locale) {

        String textoDigitado = (filtroDigitado == null) ? null : filtroDigitado.toString().trim();

        System.out.println("Filtrando pelo " + textoDigitado + ", Valor do elemento: " + valorColuna);

        if(textoDigitado == null || textoDigitado.equals("")) {
            return true;
        }

        try {
            Double precoDigitado = Double.valueOf(textoDigitado);
            Double precoColuna = (Double) valorColuna;

            return precoColuna.compareTo(precoDigitado) < 0;
        } catch (NumberFormatException e) {

            return false;
        }
    }

}

Livro

public class Livro implements Serializable {

    private static final long serialVersionUID = 1L;

    @Id
    @GeneratedValue
    private Integer id;

    private String titulo;
    private String isbn;
    private double preco;
    @Temporal(TemporalType.DATE)
    private Calendar dataLancamento = Calendar.getInstance();

    @ManyToMany(fetch=FetchType.EAGER)
    private List<Autor> autores = new ArrayList<Autor>();

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

    public void adicionaAutor(Autor autor) {
        this.autores.add(autor);
    }

    public Livro() {
    }

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getTitulo() {
        return titulo;
    }

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

    public String getIsbn() {
        return isbn;
    }

    public void setIsbn(String isbn) {
        this.isbn = isbn;
    }

    public double getPreco() {
        return preco;
    }

    public void setPreco(double preco) {
        this.preco = preco;
    }

    public Calendar getDataLancamento() {
        return dataLancamento;
    }

    public void setDataLancamento(Calendar dataLancamento) {
        this.dataLancamento = dataLancamento;
    }

    public void removeAutor(Autor autor) {
        this.autores.remove(autor);        
    }

}

Pelo que vi na documentação ambos os campos estão certos, e pelo seu código não consegui identificar nenhum erro cara, aparentemente está tudo certinho.

O problema eh que quando eu mando salvar o livro, ele salva todos os campos menos o id e o preço, e eu não sei o porque

o id quem tá gerenciando é o banco pelo que vi, mas o preco em si é algo que to achando bem bizarro.

Se você deixar um input normal inves desse inputnumber, ele salva ?

não, já tentei isso, não funcionou também eu tentei deixa o isbn como inputtext e nao funcionou tbm

Consegue colocar seu projeto no github pra eu pegar e testar ?

Já posto o git, só relembrar como faz tudo kkkk muito tempo q não mecho

Oi Matheus segue repositório do git com o projeto

https://github.com/lucassamuelrg/java-jsp-livraria