Estou com o seguinte problema em uma aplicação exemplo utilizando JSF e JPA:
javax.servlet.ServletException: #{agendaPst.inserir}: javax.faces.el.EvaluationException: javax.faces.FacesException: javax.faces.FacesException: Can’t instantiate class: ‘AgendaPst’… class AgendaPst : javax.persistence.PersistenceException: Exception [TOPLINK-28016] (Oracle TopLink Essentials - 9.1 (Build b25)): oracle.toplink.essentials.exceptions.EntityManagerSetupException
Exception Description: The persistence unit with name [agenda] does not exist. javax.faces.webapp.FacesServlet.service(FacesServlet.java:209)
Olá, pelo que vejo você configurou no seu persistence.xml uma persistence-unit com nome diferente daquele que você está passando como parâmetro para o método Persistence.createEntityManagerFactory(). Dê uma conferida.
J
jalex
Olá tnaires,
A princípio pensei que fosse isso também, mas acho que não. Segue os códigos para facilitar:
Se for possível dá uma olhada pra ver se tem alguma coisa errada. Nunca usei JPA com JSF, por isso não sei se é necessário fazer alguma configuração.
tnaires
Você criou um diretório META-INF na raiz do classpath e colocou dentro o arquivo persistence.xml?
Se você estiver usando Eclipse, por exemplo, a raiz do classpath é o diretório src. Crie o diretório lá e coloque o arquivo dentro dele.
LPJava
so um detalhe no eclipse eu recomendo vc criar o META-INF dentro de src fora do eclipse se for windows va pelo explore e crie na mao grande o diretorio com o arquivo, depois dar um refresh no eclipse. Nao sei pq, aqui ele nunca acha o arquivo de persistencia quando crio o folder pelo proprio eclipse.
Agora eu recomendo vc usar o Jboss tool la tem a opcao de vc criar um projeto JPA e ter toda estrutura montada. veja no post abaixo como instalar e configurar o Jboss tool no eclipse. http://blog.camilolopes.com.br/?p=1177
obs.: usa o recurso de code do guj para seus codigos, por favor.
flw, abraco
J
jalex
Galera,
O problema do persistence foi resolvido, mas o que acontece agora é que na minha JSP faço uma chamada para um método sem parâmetros: <p><h:commandButton value="Inserir" action="#{agendaPst.inserir}"/></p> e na minha classe de persistência AgendaPst o método chamado recebe parâmetros: public String inserir(String nome,String cidade,String endereco,String celular) Saberiam me dizer como faço na JSP pra chamar um método como parâmetros ou uma outra maneira de resolver isso?
LPJava,
Valeu pelas dicas, vou dar um olhada no JBoss Tools e quando ao recurso de code, já estou usando neste post. rsrsrs
tnaires
A Expression Language do JSF 1.2 não suporta passagem de argumentos para métodos. Você precisa passar esses valores através de bindings com as propriedades do seu managed bean.
publicclassAgendaManagedBean{privateStringnome,cidade,endereco,celular;// Getters e setters}
Onde "agenda" é o nome associado ao ManagedBean no faces-config.xml. Associe cada propriedade com algum componente que permita entrada de dados.
J
jalex
tnaires,
Fiz como você falou. Mas como faço pra recuperar os valores passados na JSP e persistir usando JPA?
tnaires
Você pode usar o método inserir() que você definiu antes e associou a um command button.
Quando o usuário clicar no botão, o JSF alimenta as propriedades do managed bean com os valores inseridos nos campos, desde que você tenha efetuado a ligação entre o managed bean e a página de acordo com o post anterior.
publicvoidinserir(){Contatocontato=newContato();contato.setNome(this.nome);contato.setCidade(this.cidade);contato.setEndereco(this.endereco);contato.setCelular(this.celular);// Agora você pode persistir o objeto contato.}
J
jalex
Olá tnaires,
Funcionou. Valeu pela ajuda e pela paciência. É bom saber que nessa área tem sempre alguém disposto a ajudar. Apesar de desenvolvimento não ser meu foco, gosto de conhecer coisas novas. Já havia feito alguma coisa com JPA, mas JSF apenas tinha ouvido falar. Resolvi estudar só para ajudar um colega no trabalho da especialização.