Separar entidade do Bean? Leiam todas as respostas
16 respostas
G
Gutofbnk
Olá mais uma vez!
Estou tentando fazer um exemplo de um cadastro de usuários e depois mostra-los... mas não estou conseguindo salvar e nem mostrar o usuário salvo :/
Bom... primeira coisa errada: Quando eu vou informar o valor(tipo: "#{usuarioBean.nome}") o eclipse não reconhece o comando, por exemplo: #{usuario.B ai quando eu aperto ctrl+Space ele não aparece a opção de autocompletar. Será que é erro de imports?
Abaixo vou postar todo o código:
UsuarioBean:
<?xml version="1.0" encoding="ISO-8859-1" ?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><htmlxmlns="http://www.w3.org/1999/xhtml"xmlns:h="http://java.sun.com/jsf/html"xmlns:f="http://java.sun.com/jsf/core"><h:head><metahttp-equiv="Content-Type"content="text/html; charset=ISO-8859-1"/><title>Insert title here</title></h:head><h:body><h1>Cadastro de Usuários</h1><hr/><h:form><h:messages/><h:panelGridcolumns="2"><h:outputLabelvalue="Nome:"for="nome"/><h:inputTextid="nome"label="nome"value="#{usuarioBean.nome}"required="true"/><h:outputLabelvalue="e-Mail:"for="email"/><h:inputTextid="email"label="e-Mail"value="#{usuarioBean.email}"/><h:outputLabelvalue="Senha:"for="senha"/><h:inputSecretid="senha"label="Senha"value="#{usuarioBean.senha}"required="true"/><h:outputLabelvalue="Confirmar Senha"for="confirmasenha"/><h:inputSecretid="confirmasenha"label="Confirmar Senha"value="#{usuarioBean.confirmaSenha}"required="true"/><h:outputText/><h:commandButtonaction="#{usuarioBean.salvar}"value="Salvar"/></h:panelGrid></h:form><hr/></h:body></html>
mostraUsuario:
<?xml version="1.0" encoding="ISO-8859-1" ?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><htmlxmlns="http://www.w3.org/1999/xhtml"xmlns:h="http://java.sun.com/jsf/html"xmlns:f="http://java.sun.com/jsf/core"><h:head><metahttp-equiv="Content-Type"content="text/html; charset=ISO-8859-1"/><title>Usuario Cadastrado</title></h:head><h:body><h1>Usuario Cadastrado</h1><hr/>
Nome: <h:outputTextvalue="#{usuarioBean.nome"/><br/>
e-Mail: <h:outputTextvalue="mailto:#{usuarioBean.email"/><h:outputTextvalue="#{usuarioBean.email"/></h:outputLink><br/>
Senha: <h:outputTextvalue="#{usuarioBean.senha}"/><br/><hr/><h:form><h:commandLinkaction="inicio"value="inicio"/></h:form></h:body></html>
O que pode estar errado?
Obrigado desde já!
Att.Augusto
Olá amigo, já tive muitos problemas relacionados ao auto complete, mas tipo, você instalou a ferramenta JBOSS Tools? Ela que te ajuda a desenvolver com jsf.
Sobre o erro, qual erro dá no console?
G
Gutofbnk
Olá darksteel3000
java.lang.ClassNotFoundException: javax.faces.webapp.FacesServlet
at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1713)
at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1558)
at org.apache.catalina.core.DefaultInstanceManager.loadClass(DefaultInstanceManager.java:527)
at org.apache.catalina.core.DefaultInstanceManager.loadClassMaybePrivileged(DefaultInstanceManager.java:509)
at org.apache.catalina.core.DefaultInstanceManager.newInstance(DefaultInstanceManager.java:137)
at org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:1144)
at org.apache.catalina.core.StandardWrapper.load(StandardWrapper.java:1088)
at org.apache.catalina.core.StandardContext.loadOnStartup(StandardContext.java:5033)
at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5317)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1559)
at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1549)
at java.util.concurrent.FutureTask$Sync.innerRun(Unknown Source)
at java.util.concurrent.FutureTask.run(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)
Esses são os erros que dão no console do cadastro de usuários
Lembrando que eu estou executando apenas a pagina, se eu executo o arquivo inteiro ele cai no erro 404
Esses codigos eu tirei do livro Programação Java para Web.
Ja tinha programado alguma coisa só que pra desktop eu usava o dao pra fazer o crude, eu não entendi os metodos ali do Bean o novo e o salvar o que eles estão fazendo. Se puder ajudar com algumas informações sobre eles fico grato.
E sobre essa ferramenta? O que ela faz?
Obrigado pela resposta!
Att. Augusto
darksteel3000
Jboss tools é um pluguin para o eclipse que ajuda a nós desenvolvedores, a executar nosso trabalho, com JSF, Hibernate, etc.
Você colocou o jar do jsf e o jar da implementação no classpath do seu projeto ?
G
Gutofbnk
Matheus Paiva:
o seu salvar tu faz pelo que ?
jdbc ?
Jpa ?
Não sei cara, sou muito novato… to seguindo um livro, o metodo salvar que eu fiz eu só criei uma classe dentro do projeto e ja coloquei as variaveis, e fiz os gets e sets dela ai em baixo eu criei o metodo salvar como esta ali em cima
G
Gutofbnk
darksteel3000:
Jboss tools é um pluguin para o eclipse que ajuda a nós desenvolvedores, a executar nosso trabalho, com JSF, Hibernate, etc.
<?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_3_0.xsd" version="3.0">
<display-name>olamundo</display-name>
<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>*.jsf.</url-pattern>
</servlet-mapping>
</web-app>
as libs, são os cummons: logging, digester, collections, beanutils e javax.faces-2.0.10 e os jstl APi e Implementation
darksteel3000
Mano troca essa parte:
<url-pattern>*.jsf.</url-pattern>
Por esta:
<url-pattern>*.jsf</url-pattern>
A
adi_silva
Muda como te falei que da certo, este livro que vc esta acompanhado e o JAVA PRA WEB, ja li ele.
O erro que esta apresentando, e referente ao objeto USUARIO que você não esta passando para ser persistido.
Modifique sua classe assim
packagefinanceiro.web;importjavax.faces.application.FacesMessage;importjavax.faces.bean.ManagedBean;importjavax.faces.bean.RequestScoped;importjavax.faces.context.FacesContext;//adicione a importação da classe USUARIO(entidade)@ManagedBean(name="usuarioBean")@RequestScopedpublicclassUsuarioBean{//adicione a linha abaixo e faça o get e setprivateUsuariousuario=newUsuario();privateStringnome;privateStringemail;privateStringsenha;privateStringconfirmaSenha;publicStringgetNome(){returnnome;}publicvoidsetNome(Stringnome){this.nome=nome;}publicStringgetEmail(){returnemail;}publicvoidsetEmail(Stringemail){this.email=email;}publicStringgetSenha(){returnsenha;}publicvoidsetSenha(Stringsenha){this.senha=senha;}publicStringgetConfirmaSenha(){returnconfirmaSenha;}publicvoidsetConfirmaSenha(StringconfirmaSenha){this.confirmaSenha=confirmaSenha;}publicStringnovo(){// executa operação return"usuario";}publicStringsalvar(){FacesContextcontext=FacesContext.getCurrentInstance();if(this.senha.equalsIgnoreCase(this.confirmaSenha)){context.addMessage(null,newFacesMessage(FacesMessage.SEVERITY_ERROR,"Senha"+" confirmada incorretamente",""));return"usuario";}//salva usuario return"sucesso";}}
<?xml version="1.0" encoding="ISO-8859-1" ?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><htmlxmlns="http://www.w3.org/1999/xhtml"xmlns:h="http://java.sun.com/jsf/html"xmlns:f="http://java.sun.com/jsf/core"><h:head><metahttp-equiv="Content-Type"content="text/html; charset=ISO-8859-1"/><title>Insert title here</title></h:head><h:body><h1>Cadastro de Usuários</h1><hr/><h:form><h:messages/><h:panelGridcolumns="2"><h:outputLabelvalue="Nome:"for="nome"/><h:inputTextid="nome"label="nome"value="#{usuarioBean.usuario.nome}"required="true"/><h:outputLabelvalue="e-Mail:"for="email"/><h:inputTextid="email"label="e-Mail"value="#{usuarioBean.usuario.email}"/><h:outputLabelvalue="Senha:"for="senha"/><h:inputSecretid="senha"label="Senha"value="#{usuarioBean.usuario.senha}"required="true"/><h:outputLabelvalue="Confirmar Senha"for="confirmasenha"/><h:inputSecretid="confirmasenha"label="Confirmar Senha"value="#{usuarioBean.confirmaSenha}"required="true"/><h:outputText/><h:commandButtonaction="#{usuarioBean.salvar}"value="Salvar"/></h:panelGrid></h:form><hr/></h:body></html>
Não sei se você já chegou na parte de criar a conexãoFilter, se sim, não esqueça de mapear no XML e criar a classe, verifica tbm se foi feito a instanciação da DAOFactory
G
Gutofbnk
adi_silva:
Muda como te falei que da certo, este livro que vc esta acompanhado e o JAVA PRA WEB, ja li ele.
O erro que esta apresentando, e referente ao objeto USUARIO que você não esta passando para ser persistido.
Modifique sua classe assim
packagefinanceiro.web;importjavax.faces.application.FacesMessage;importjavax.faces.bean.ManagedBean;importjavax.faces.bean.RequestScoped;importjavax.faces.context.FacesContext;//adicione a importação da classe USUARIO(entidade)@ManagedBean(name="usuarioBean")@RequestScopedpublicclassUsuarioBean{//adicione a linha abaixo e faça o get e setprivateUsuariousuario=newUsuario();privateStringnome;privateStringemail;privateStringsenha;privateStringconfirmaSenha;publicStringgetNome(){returnnome;}publicvoidsetNome(Stringnome){this.nome=nome;}publicStringgetEmail(){returnemail;}publicvoidsetEmail(Stringemail){this.email=email;}publicStringgetSenha(){returnsenha;}publicvoidsetSenha(Stringsenha){this.senha=senha;}publicStringgetConfirmaSenha(){returnconfirmaSenha;}publicvoidsetConfirmaSenha(StringconfirmaSenha){this.confirmaSenha=confirmaSenha;}publicStringnovo(){// executa operação return"usuario";}publicStringsalvar(){FacesContextcontext=FacesContext.getCurrentInstance();if(this.senha.equalsIgnoreCase(this.confirmaSenha)){context.addMessage(null,newFacesMessage(FacesMessage.SEVERITY_ERROR,"Senha"+" confirmada incorretamente",""));return"usuario";}//salva usuario return"sucesso";}}
<?xml version="1.0" encoding="ISO-8859-1" ?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><htmlxmlns="http://www.w3.org/1999/xhtml"xmlns:h="http://java.sun.com/jsf/html"xmlns:f="http://java.sun.com/jsf/core"><h:head><metahttp-equiv="Content-Type"content="text/html; charset=ISO-8859-1"/><title>Insert title here</title></h:head><h:body><h1>Cadastro de Usuários</h1><hr/><h:form><h:messages/><h:panelGridcolumns="2"><h:outputLabelvalue="Nome:"for="nome"/><h:inputTextid="nome"label="nome"value="#{usuarioBean.usuario.nome}"required="true"/><h:outputLabelvalue="e-Mail:"for="email"/><h:inputTextid="email"label="e-Mail"value="#{usuarioBean.usuario.email}"/><h:outputLabelvalue="Senha:"for="senha"/><h:inputSecretid="senha"label="Senha"value="#{usuarioBean.usuario.senha}"required="true"/><h:outputLabelvalue="Confirmar Senha"for="confirmasenha"/><h:inputSecretid="confirmasenha"label="Confirmar Senha"value="#{usuarioBean.confirmaSenha}"required="true"/><h:outputText/><h:commandButtonaction="#{usuarioBean.salvar}"value="Salvar"/></h:panelGrid></h:form><hr/></h:body></html>
Não sei se você já chegou na parte de criar a conexãoFilter, se sim, não esqueça de mapear no XML e criar a classe, verifica tbm se foi feito a instanciação da DAOFactory
Opa, obrigado pelo toque, no livro não diz que tem que instanciar o usuario e nem fala dessa annotation pra importar o usuarioBean, é bom ter ajuda de alguem que conhece o conteudo que eu estou estudando. Ainda não cheguei nesta parte, quando eu chegar la vou lembrar. Ainda não instanciei o DAOfactory, o que é isso? é o mesmo dao que faz o crude? O que não entendo é como o usuario esta sendo salvo pelo metodo “salvar” o que consegui entender la são as mensagens enviadas quando a senha é digitada diferente uma da outra. Poderia dar uma ajuda para que eu possa entender o que esta acontecendo na classe e como esse metodo salva o usuario e depois mostra os dados na classe mostraUsuario?
E é claro, muito obrigado pela resposta, quando chegar em casa vou tentar arrumar isso.
Valew!
G
Gutofbnk
[quote=darksteel3000]Mano troca essa parte:
<url-pattern>*.jsf.</url-pattern>
Por esta:
<url-pattern>*.jsf</url-pattern>
Valew pelo toque, foi um detalhe que passou despersebido
G
Gutofbnk
Classpath não é aquela variavel de ambiente? Não tenho certeza se passei o valor correto pra ela, sabe me dizer qual é?
Sobre o que eu coloquei no projeto… como eu citei abaixo as importações que fiz para o projeto foram as libs: cummons: logging, digester, collections, beanutils e javax.faces-2.0.10 e os jstl APi e Implementation.
Jar de implementação seria o implementation do jstl?
Obrigado pela resposta!
Qual import? não fiz a classe entidade por que esse usuarioBean já é a entidade não? Tem todos os atributos e o métodos gets e sets só que ai fiz os métodos salvar e novo na mesma classe, como está no livro. Preciso fazer uma classe entidade separada da Bean? ai faço a usuarioBean só pros métodos salvar e novo.
G
Gutofbnk
Se alguém souber responder, por favor de sua sugestão!
Att Augusto.