Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

Problemas ao gravar

Sempre que tento gravar ele me mostra isso:

javax.servlet.ServletException: /livro.xhtml @12,65 value="#{livroBean.livro.titulo}": Target Unreachable, [livro] returned null

No campo double, que era pra ele me mostrar 0.0 ao renderizar a página, fica vazio.

Segue meu xhtml:

<?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://java.sun.com/jsf/html">

<h:body>
    <h1 align="center">Novo livro</h1>
    <h:form>
        <fieldset>
            <legend>Dados do livro</legend>
            <h:panelGrid columns="2">
                <h:outputText value="Título: " for="titulo"/>
                <h:inputText id="titulo" value="#{livroBean.livro.titulo}"/>

                <h:outputText value="ISBN: " for="isbn"/>
                <h:inputText id="isbn" value="#{livroBean.livro.isbn}"/>

                <h:outputText value="Preço: " for="preco"/>
                <h:inputText id="preco" value="#{livroBean.livro.preco}"/>

                <h:outputText value="Data de lançamento: " for="dataDeLancamento"/>
                <h:inputText id="dataDeLancamento" value="#{livroBean.livro.dataDeLancamento}"/>

                <h:commandButton value="Gravar" action="#{livroBean.gravar()}"/>
            </h:panelGrid>
        </fieldset>
    </h:form>
</h:body>


</html>

E meu bean:

package br.com.caelum.livraria.bean;

import javax.faces.bean.ManagedBean;

import br.com.caelum.livraria.model.Livro;

@ManagedBean
public class LivroBean {

    private Livro livro;

    public void gravar() {
        System.out.println("Livro salvo: " + livro.getTitulo());
    }

    public Livro getLivro() {
        return livro;
    }

}

Na classe livro tenho apenas atributos e os getters and setters.

Alguém sabe o que pode ser?

2 respostas
solução!

Oi Naldson,

O erro acontece porque o atributo Livro da classe LivroBean está null. Então se você tentar acessar qualquer informação dele, por exemplo o preco, no XHTML, vai dar esse erro.

Pra corrigir esse problema, você deve instanciar o objeto livro no ManagedBean:

@ManagedBean
public class LivroBean {

    private Livro livro = new Livro();

    //resto do seu codigo...

Bons estudos!

Exatamente isso! Obrigado