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

Error 500 - Target Unreachable, identifier 'livroBean' resolved to null

Versão do Tomcat: 8.5.9

Versão do JSF: 2.2

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>Novo Livro</h1>
        <h:form>
            <fieldset>
                <legend>Dados do livro</legend>
                <h:panelGrid columns="2">
                    <h:outputLabel value="Titulo:" for="titulo"/>
                    <h:inputText id="titulo"/>

                    <h:outputLabel value="ISBN:" for="isbn" />
                    <h:inputText id="isbn" />

                    <h:outputLabel value="Preço:" for="preco" />
                    <h:inputText id="preco" />

                    <h:outputLabel value="Data de lançamento:" for="dataLancamento" />
                    <h:inputText id="dataLancamento" />

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

</html>

CLASS

package br.com.caelum.livraria.bean;

import javax.faces.bean.ManagedBean;

@ManagedBean
public class LivroBean {

    public void gravar() {
        System.out.println("Gravando o livro!");
    }

}

A primeira página localhost:8080/jsf-livraria/livro.xhtml funciona sem nenhum problema, entretanto, ao clicar em Gravar é exibido este erro:

HTTP Status 500 - javax.el.PropertyNotFoundException: /livro.xhtml @24,69 action="#{livroBean.gravar}": Target Unreachable, identifier 'livroBean' resolved to null

Tem algum problema no código? Deixei passar algo?

É possível que o erro esteja acontecendo por eu estar utilizando a versão 8.5.9 do Tomcat?

2 respostas
solução!

Mathews,

O método passado pro atributo "action" do commandButton deve retorar uma String, para dizer o resultado da operação (Normalmente o nome da viewpara qual o usuário será redirecionado após a execução)

Um exemplo de solução seria mudar o método gravar dessa maneira:

    public String gravar() {
        System.out.println("Gravando o livro!");
        return "sucesso";
    }

Felipe Vieira, muito obrigado por ter respondido, entretanto, consegui fazer compilar sem nenhum error usando void.

Acredito que estava dando alguns erros diretamente no Eclipse. Removi todas as pastar e baixei novamente. Funcionou sem nenhum problema :)