5
respostas

The class 'br.com.casadocodigo.loja.beans.AdminLivrosBean' does not have the property 'Livro'.

Após seguir todos os passos e revisar tudo, ainda continuo tendo erro : value="#{adminLivrosBean.Livro.titulo}": The class 'br.com.casadocodigo.loja.beans.AdminLivrosBean' does not have the property 'Livro'.

O mais estranho e que o código está igual, tudo foi feito exatamente igual, não consigo encontra o erro:

Form

<!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://xmlns.jcp.org/jsf/html"
    xmlns:f="http://xmlns.jcp.org/jsf/core">



    <h:form>
       <div>
           <h:outputLabel value="Título"/>
           <h:inputText value="#{adminLivrosBean.Livro.titulo}"/>
       </div>  
       <div>
           <h:outputLabel value="Descrição"/>
           <h:inputTextarea rows="4" cols="20" value="#{adminLivrosBean.Livro.descricao}"/>
       </div>    
        <div>
           <h:outputLabel value="Número Páginas"/>
           <h:inputText value="#{adminLivrosBean.Livro.numeroPaginas}"/>
       </div>    
        <div>
           <h:outputLabel value="Preço"/>
           <h:inputText value="#{adminLivrosBean.Livro.preco}"/>
       </div>  

       <h:commandButton value="Cadastrar" action="#{adminLivrosBean.salvar}"/>

    </h:form>



</html>
package br.com.casadocodigo.loja.beans;

import javax.enterprise.context.RequestScoped;
import javax.faces.bean.ManagedBean;
import javax.inject.Named;
import br.com.casadocodigo.loja.models.Livro;

//CDI
@Named
@RequestScoped
@ManagedBean(value="adminLivrosBean")
public class AdminLivrosBean {

    private Livro livro = new Livro();


    public void salvar(){

        System.out.println("Livro Cadastrado:" + livro);

    }


    public Livro getLivro() {
        return livro;
    }


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

Tudo bem, José?

O livro no .xhtml, tem que estar todo em minúsculo, como em:

<h:inputText value="#{adminLivrosBean.livro.titulo}" />

Tenta e vê se funciona? Um abraço.

OLá Lucas, eu fiz o ajuste, também removi o //@ManagedBean(name="adminLivrosBean")

observei que é possível localizar o bean, mais ao fazer o teste me gerou erro:

javax.servlet.ServletException: /livros/form.xhtml @13,62 value="#{adminLivrosBean.livro.titulo}": Target Unreachable, identifier 'adminLivrosBean' resolved to null
javax.faces.webapp.FacesServlet.service(FacesServlet.java:671)

Acredito que faltou algum detalhe na aula que não foi gravado, eu encontrei isso:

"O que acontece é que a pasta META-INF dentro do WebContent não faz parte do Classpath, então na hora que o aplicativo sobe pro servidor, a JPA procura o persistence.xml dentro do META-INF, mas não encontrava.

Já o que está no src faz parte do Classpath (na verdade, tudo que está dentro do src faz parte dele)."

Poderia me explicar se faltou alguma coisa?

<h:form>
   <div>
       <h:outputLabel value="Título"/>
       <h:inputText value="#{adminLivrosBean.livro.titulo}"/>
   </div>  
   <div>
       <h:outputLabel value="Descrição"/>
       <h:inputTextarea rows="4" cols="20" value="#{adminLivrosBean.livro.descricao}"/>
   </div>    
    <div>
       <h:outputLabel value="Número Páginas"/>
       <h:inputText value="#{adminLivrosBean.livro.numeroPaginas}"/>
   </div>    
    <div>
       <h:outputLabel value="Preço"/>
       <h:inputText value="#{adminLivrosBean.livro.preco}"/>
   </div>  

   <h:commandButton value="Cadastrar" action="#{adminLivrosBean.salvar}"/>

</h:form>

Oi José.

No curso é utilizado Maven (o projeto é criado utilizando o JBoss Forge), que tem um estrutura um pouco diferente de um projeto web criado no Eclipse.

Nesse caso o persistence.xml tem que ficar dentro dessa pasta:

src/main/resources/META-INF/

Caso não esteja utilizando Maven, recomendo criar um projeto maven.

Aqui tem o código desenvolvido na primeira aula:

https://github.com/alura-cursos/java-ee-webapp/archive/e865030287b34b48df96d12ef8ad3e0e8b56c8df.zip

E na alura temos um curso de Maven:

https://cursos.alura.com.br/course/maven-build-do-zero-a-web

Pode tentar?

Abraço!

Lucas, O projeto foi construído do zero seguindo os passos do instrutor, está parte do META-INF não foi mostrado no vídeo, inclusive eu verifique o arquivo persistence.xml tem uma configuração que também não foi realizada dentro do arquivo “standalone\configuration\standalone.xml” então se adicionar o arquivo minha aplicação não vai funcionar, visto que não tenho estas configurações então eu fiz a criação apenas da pasta “META-INF” e agora está funcionando normalmente. Solução do problema Fazer a criação de uma pasta “META-INF” dentro de “src/main/resources/META-INF/” , vazia neste primeiro momento, desta forma vai funcionar, agora vou seguir para a próxima aula. Abraço.

Oi José, que bom que funcionou, vi que nesta mesmo aula mais a frente é realizada a configuração do DAO.

Qualquer problema que venha a ter é só abrir um novo tópico, combinado?

Abraço e bons estudos!