Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

Adicionando outro link

Caros,

Durante esta sétima aula, pensei em criar um link na página autor.xhtml para redirecionar para a página livro.xhtml (similar ao que criamos em aulas anteriores).

Mas estou enfrentando um erro. Vamos lá. Criei o link da seguinte maneira:

< h:commandLink value="Cadastro de Livros"
                        action="#{AutorBean.formLivro}" immediate="true" />

Fiz algumas alterações na classe AutorBean, pois vi que ela não havia algumas implementações do LivroBean, como a implementação do Serializable. Minha classe ficou:

@ManagedBean

@ViewScoped --Inseri o escopo da View

public class AutorBean implements Serializable{

private static final long serialVersionUID = 1L;

--atributos..

--metodos..

public String formLivro(){

        System.out.println("Chamando o formulário de Livros");

        return "livro";

    }

}

Obs.: Se no action do commandLink eu colocar "livro" ao invés do método da classe AutorBean, ele redireciona normal.

O erro é:

Caused by: javax.faces.el.EvaluationException: javax.el.PropertyNotFoundException: /autor.xhtml @27,58 action="#{AutorBean.formLivro}": Target Unreachable, identifier 'AutorBean' resolved to null
    at javax.faces.component.MethodBindingMethodExpressionAdapter.invoke(MethodBindingMethodExpressionAdapter.java:94)
    at com.sun.faces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:101)
    ... 27 more
Caused by: javax.el.PropertyNotFoundException: /autor.xhtml @27,58 action="#{AutorBean.formLivro}": Target Unreachable, identifier 'AutorBean' resolved to null
    at com.sun.faces.facelets.el.TagMethodExpression.invoke(TagMethodExpression.java:107)
    at javax.faces.component.MethodBindingMethodExpressionAdapter.invoke(MethodBindingMethodExpressionAdapter.java:87)
    ... 28 more

Por favor, podem me ajudar? Surgiu uma outra dúvida também, qual o motivo/intenção em implementar a classe Serializable? Oque ela faz e porque devemos implementa-la?

Obrigado!

1 resposta
solução!

Olá Fernando,

O que acontece é que a Expression Language não consegue resolver um identificador. Pelo que percebi você usou na EL o nome do Bean tal qual o nome da classe #{AutorBean.formLivro}, mas lembre-se que por padrão os beans são expostos na EL em variáveis começando com minusculo. Tente #{autorBean.formLivro}.

Sobre a interface Serializable (http://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html), ela é utilizada em casos onde desejamos serializar/deserializar o estado de objetos, de objetos para bytes - bytes para objetos, por exemplo. Ela é utilizada como base para serialização e para controlar essas transições de formato impõe que usemos identificadores nas nossas classes.

Espero ter ajudado. Abraço!