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

javax.el.PropertyNotFoundException: Target Unreachable, identifier 'livroBean' resolved to null

Boa noite gente, estou fazendo o curso de JSF e estou com essa mensagem de erro como mencionei no título, alguém poderia me ajudar?

Erro:

javax.el.PropertyNotFoundException: /index.xhtml @18,59 value="#{livroBean.titulo}": Target Unreachable, identifier 'livroBean' resolved to null
    at com.sun.faces.facelets.el.TagValueExpression.getType(TagValueExpression.java:100)
    at com.sun.faces.renderkit.html_basic.HtmlBasicInputRenderer.getConvertedValue(HtmlBasicInputRenderer.java:95)
    at javax.faces.component.UIInput.getConvertedValue(UIInput.java:1046)
    at javax.faces.component.UIInput.validate(UIInput.java:976)
    at javax.faces.component.UIInput.executeValidate(UIInput.java:1249)
    at javax.faces.component.UIInput.processValidators(UIInput.java:712)
    at javax.faces.component.UIComponentBase.processValidators(UIComponentBase.java:1258)
    at javax.faces.component.UIForm.processValidators(UIForm.java:253)
    at javax.faces.component.UIComponentBase.processValidators(UIComponentBase.java:1258)
    at javax.faces.component.UIComponentBase.processValidators(UIComponentBase.java:1258)
    at javax.faces.component.UIViewRoot.processValidators(UIViewRoot.java:1195)
    at com.sun.faces.lifecycle.ProcessValidationsPhase.execute(ProcessValidationsPhase.java:76)
    at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101)
    at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:198)
    at javax.faces.webapp.FacesServlet.service(FacesServlet.java:646)
    at org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:511)
    at org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:390)
    at org.mortbay.jetty.security.SecurityHandler.handle(SecurityHandler.java:216)
    at org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java:182)
    at org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:765)
    at org.mortbay.jetty.webapp.WebAppContext.handle(WebAppContext.java:440)
    at org.mortbay.jetty.handler.ContextHandlerCollection.handle(ContextHandlerCollection.java:230)
    at org.mortbay.jetty.handler.HandlerCollection.handle(HandlerCollection.java:114)
    at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152)
    at org.mortbay.jetty.Server.handle(Server.java:326)
    at org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:542)
    at org.mortbay.jetty.HttpConnection$RequestHandler.content(HttpConnection.java:943)
    at org.mortbay.jetty.HttpParser.parseNext(HttpParser.java:756)
    at org.mortbay.jetty.HttpParser.parseAvailable(HttpParser.java:218)
    at org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:404)
    at org.mortbay.io.nio.SelectChannelEndPoint.run(SelectChannelEndPoint.java:410)
    at org.mortbay.thread.QueuedThreadPool$PoolThread.run(QueuedThreadPool.java:582)
Caused by: javax.el.PropertyNotFoundException: Target Unreachable, identifier 'livroBean' resolved to null
    at com.sun.el.parser.AstValue.getTarget(AstValue.java:84)
    at com.sun.el.parser.AstValue.getType(AstValue.java:69)
    at com.sun.el.ValueExpressionImpl.getType(ValueExpressionImpl.java:194)
    at com.sun.faces.facelets.el.TagValueExpression.getType(TagValueExpression.java:98)

Minha página:

<!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:head>
    <title>JSF 2.0 Hello World</title>
</h:head>

<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" value="#{livroBean.titulo}"/>
                <h:outputLabel value="ISBN:" for="isbn" />
                <h:inputText id="isbn" value="#{livroBean.isbn}"/>
                <h:outputLabel value="Preço:" for="preco" />
                <h:inputText id="preco" value="#{livroBean.preco}"/>
                <h:outputLabel value="Data de Lançamento:" for="dataLancamento" />
                <h:inputText id="dataLancamento" value="#{livroBean.dataLancamento}"/>
                <h:commandButton value="Gravar" action="#{livroBean.gravar}"/>
            </h:panelGrid>
        </fieldset>
    </h:form>
</h:body>
</html>

Minha classe:

import javax.faces.bean.ManagedBean;

@ManagedBean
public class LivroBean {

    private String titulo;
    private String isbn;
    private double preco;
    private String dataLancamento;

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

    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 String getDataLancamento() {
        return dataLancamento;
    }

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

Web.xml:


<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xmlns="http://java.sun.com/xml/ns/javaee"
         xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
         xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
         version="2.5">

    <servlet>
        <servlet-name>Faces Servlet</servlet-name>
        <servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
        <load-on-startup>1</load-on-startup>
    </servlet>

    <servlet-mapping>
        <servlet-name>Faces Servlet</servlet-name>
        <url-pattern>*.xhtml</url-pattern>
        <url-pattern>/faces/*</url-pattern>
    </servlet-mapping>

    <welcome-file-list>
        <welcome-file>faces/index.xhtml</welcome-file>
    </welcome-file-list>
</web-app>

faces-config.xml


<faces-config
    xmlns="http://xmlns.jcp.org/xml/ns/javaee"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-facesconfig_2_2.xsd"
    version="2.2">

</faces-config>

Obs: Achei estranho, pois quando digito o nome do bean na página, o auto complete acha o bean, por isso não estou entendendo o erro.

Obrigado!

3 respostas

Fala fellipe tranquilo cara? O seu erro é que a sua classe não possui um identificador, falto o id ou codigo, tenta por isso na sua classe.

@ManagedBean
public class LivroBean {
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Integer codigo;
    private String titulo;
    private String isbn;
    private double preco;
    private String dataLancamento;

Não esquece de gerar os getters and setters parceiro, abraço é nois

Não adianta, o próprio exemplo do curso nessa parte não utiliza nada relacionado ao JPA, acredito que seja alguma configuração que eu esteja fazendo errado.

solução!

Gente, no projeto eu estou usando gradle, e estava rodando no jettyRun do gradle, quando mudei pro tomcat, o projeto funcionou, então pelo que sei falta algo no meu build.gradle, alguem saberia me dizer o que é?


group 'br.com.alura.jsf'
version '1.0-SNAPSHOT'

apply plugin: 'java'
apply plugin: 'war'
apply plugin: 'jetty'

sourceCompatibility = 1.7
targetCompatibility = 1.7

repositories {
    mavenCentral()
}

dependencies {

    compile 'javax.servlet:servlet-api:2.5'

    compile 'com.sun.faces:jsf-api:2.2.5'
    compile 'com.sun.faces:jsf-impl:2.2.5'

    compile 'org.primefaces:primefaces:4.0'

    compile 'org.hibernate:hibernate-core:5.2.4.Final'

    testCompile group: 'junit', name: 'junit', version: '4.11'
}