Separar entidade do Bean? Leiam todas as respostas

16 respostas
G
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:
package financeiro.web;

import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.RequestScoped;
import javax.faces.context.FacesContext;
@ManagedBean(name="usuarioBean")
@RequestScoped
public class UsuarioBean {

	private String nome;
	private String email;
	private String senha;
	private String confirmaSenha;

	public String getNome() {
		return nome;
	}

	public void setNome(String nome) {
		this.nome = nome;
	}

	public String getEmail() {
		return email;
	}

	public void setEmail(String email) {
		this.email = email;
	}

	public String getSenha() {
		return senha;
	}

	public void setSenha(String senha) {
		this.senha = senha;
	}

	public String getConfirmaSenha() {
		return confirmaSenha;
	}

	public void setConfirmaSenha(String confirmaSenha) {
		this.confirmaSenha = confirmaSenha;
	}

	public String novo() {
		// executa operação
		return "usuario";
	}

	public String salvar() {
		FacesContext context = FacesContext.getCurrentInstance();
		if (this.senha.equalsIgnoreCase(this.confirmaSenha)) {
			context.addMessage(null, new FacesMessage(
					FacesMessage.SEVERITY_ERROR, "Senha"
							+ " confirmada incorretamente", ""));
			return "usuario";
		}
		//salva usuario
		return "sucesso";
	}

}
usuario.xhtml:
<?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">
<html xmlns="http://www.w3.org/1999/xhtml"
	xmlns:h="http://java.sun.com/jsf/html"
	xmlns:f="http://java.sun.com/jsf/core">
<h:head>
<meta http-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:panelGrid columns="2">
<h:outputLabel value="Nome:" for="nome"/>
<h:inputText id="nome" label="nome" value="#{usuarioBean.nome}" required="true"/>
<h:outputLabel value="e-Mail:" for="email"/>
<h:inputText id="email" label="e-Mail" value="#{usuarioBean.email}"/>
<h:outputLabel value="Senha:" for="senha"/>
<h:inputSecret id="senha" label="Senha" value="#{usuarioBean.senha}" required="true"/>
<h:outputLabel value="Confirmar Senha" for="confirmasenha"/>
<h:inputSecret id="confirmasenha" label="Confirmar Senha" value="#{usuarioBean.confirmaSenha}" required="true"/>
<h:outputText />
<h:commandButton action="#{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">
<html xmlns="http://www.w3.org/1999/xhtml"
	xmlns:h="http://java.sun.com/jsf/html"
	xmlns:f="http://java.sun.com/jsf/core">
<h:head>
	<meta http-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:outputText value="#{usuarioBean.nome" />
	<br />
e-Mail: <h:outputText value="mailto:#{usuarioBean.email" />
	<h:outputText value="#{usuarioBean.email" />
	</h:outputLink>
	<br />
Senha: <h:outputText value="#{usuarioBean.senha}" />
	<br />
	<hr />
	<h:form>
		<h:commandLink action="inicio" value="inicio" />
	</h:form>
</h:body>
</html>
O que pode estar errado? Obrigado desde já! Att.Augusto

16 Respostas

darksteel3000

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

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 :frowning:
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.

http://www.jboss.org/tools/download/installation

Já sobre o erro realmente parece erro de import, tente utilizar o conjunto do myfaces: http://myfaces.apache.org/download.html

Mas antes de utiliza-lo me manda teu web.xml

e quais libs c ta usando.

Matheus_Paiva

o seu salvar tu faz pelo que ?
jdbc ?
Jpa ?

A

Você não esta referenciando o objeto USUARIO.

Instancie ele no ManagerBean.

private Usuario usuario = new Usuario();

//get e set

Na view você tera que chamar assim

//exemplo
<h:inputText id="nome" value"#{usuarioBean.usuario.nome}" />

Ai vai funcionar

lele_vader

Você colocou o jar do jsf e o jar da implementação no classpath do seu projeto ?

G

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

darksteel3000:
Jboss tools é um pluguin para o eclipse que ajuda a nós desenvolvedores, a executar nosso trabalho, com JSF, Hibernate, etc.

http://www.jboss.org/tools/download/installation

Já sobre o erro realmente parece erro de import, tente utilizar o conjunto do myfaces: http://myfaces.apache.org/download.html

Mas antes de utiliza-lo me manda teu web.xml

e quais libs c ta usando.


meu web.xml:

&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt; &lt;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"&gt; &lt;display-name&gt;olamundo&lt;/display-name&gt; &lt;servlet&gt; &lt;servlet-name&gt;Faces Servlet&lt;/servlet-name&gt; &lt;servlet-class&gt;javax.faces.webapp.FacesServlet&lt;/servlet-class&gt; &lt;load-on-startup&gt;1&lt;/load-on-startup&gt; &lt;/servlet&gt; &lt;servlet-mapping&gt; &lt;servlet-name&gt;Faces Servlet&lt;/servlet-name&gt; &lt;url-pattern&gt;*.jsf.&lt;/url-pattern&gt; &lt;/servlet-mapping&gt; &lt;/web-app&gt;
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:

&lt;url-pattern&gt;*.jsf.&lt;/url-pattern&gt;

Por esta:

&lt;url-pattern&gt;*.jsf&lt;/url-pattern&gt;
A

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

package financeiro.web;  
  
import javax.faces.application.FacesMessage;  
import javax.faces.bean.ManagedBean;  
import javax.faces.bean.RequestScoped;  
import javax.faces.context.FacesContext;  
//adicione a importação da classe USUARIO(entidade)
@ManagedBean(name="usuarioBean")  
@RequestScoped  
public class UsuarioBean {  
  
    //adicione a linha abaixo e faça o get e set
    private Usuario usuario = new Usuario();

    private String nome;  
    private String email;  
    private String senha;  
    private String confirmaSenha;  
  
    public String getNome() {  
        return nome;  
    }  
  
    public void setNome(String nome) {  
        this.nome = nome;  
    }  
  
    public String getEmail() {  
        return email;  
    }  
  
    public void setEmail(String email) {  
        this.email = email;  
    }  
  
    public String getSenha() {  
        return senha;  
    }  
  
    public void setSenha(String senha) {  
        this.senha = senha;  
    }  
  
    public String getConfirmaSenha() {  
        return confirmaSenha;  
    }  
  
    public void setConfirmaSenha(String confirmaSenha) {  
        this.confirmaSenha = confirmaSenha;  
    }  
  
    public String novo() {  
        // executa operação  
        return "usuario";  
    }  
  
    public String salvar() {  
        FacesContext context = FacesContext.getCurrentInstance();  
        if (this.senha.equalsIgnoreCase(this.confirmaSenha)) {  
            context.addMessage(null, new FacesMessage(  
                    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">  
<html xmlns="http://www.w3.org/1999/xhtml"  
    xmlns:h="http://java.sun.com/jsf/html"  
    xmlns:f="http://java.sun.com/jsf/core">  
<h:head>  
<meta http-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:panelGrid columns="2">  
<h:outputLabel value="Nome:" for="nome"/>  
<h:inputText id="nome" label="nome" value="#{usuarioBean.usuario.nome}" required="true"/>  
<h:outputLabel value="e-Mail:" for="email"/>  
<h:inputText id="email" label="e-Mail" value="#{usuarioBean.usuario.email}"/>  
<h:outputLabel value="Senha:" for="senha"/>  
<h:inputSecret id="senha" label="Senha" value="#{usuarioBean.usuario.senha}" required="true"/>  
<h:outputLabel value="Confirmar Senha" for="confirmasenha"/>  
<h:inputSecret id="confirmasenha" label="Confirmar Senha" value="#{usuarioBean.confirmaSenha}" required="true"/>  
<h:outputText />  
<h:commandButton action="#{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

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

package financeiro.web;  
  
import javax.faces.application.FacesMessage;  
import javax.faces.bean.ManagedBean;  
import javax.faces.bean.RequestScoped;  
import javax.faces.context.FacesContext;  
//adicione a importação da classe USUARIO(entidade)
@ManagedBean(name="usuarioBean")  
@RequestScoped  
public class UsuarioBean {  
  
    //adicione a linha abaixo e faça o get e set
    private Usuario usuario = new Usuario();

    private String nome;  
    private String email;  
    private String senha;  
    private String confirmaSenha;  
  
    public String getNome() {  
        return nome;  
    }  
  
    public void setNome(String nome) {  
        this.nome = nome;  
    }  
  
    public String getEmail() {  
        return email;  
    }  
  
    public void setEmail(String email) {  
        this.email = email;  
    }  
  
    public String getSenha() {  
        return senha;  
    }  
  
    public void setSenha(String senha) {  
        this.senha = senha;  
    }  
  
    public String getConfirmaSenha() {  
        return confirmaSenha;  
    }  
  
    public void setConfirmaSenha(String confirmaSenha) {  
        this.confirmaSenha = confirmaSenha;  
    }  
  
    public String novo() {  
        // executa operação  
        return "usuario";  
    }  
  
    public String salvar() {  
        FacesContext context = FacesContext.getCurrentInstance();  
        if (this.senha.equalsIgnoreCase(this.confirmaSenha)) {  
            context.addMessage(null, new FacesMessage(  
                    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">  
<html xmlns="http://www.w3.org/1999/xhtml"  
    xmlns:h="http://java.sun.com/jsf/html"  
    xmlns:f="http://java.sun.com/jsf/core">  
<h:head>  
<meta http-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:panelGrid columns="2">  
<h:outputLabel value="Nome:" for="nome"/>  
<h:inputText id="nome" label="nome" value="#{usuarioBean.usuario.nome}" required="true"/>  
<h:outputLabel value="e-Mail:" for="email"/>  
<h:inputText id="email" label="e-Mail" value="#{usuarioBean.usuario.email}"/>  
<h:outputLabel value="Senha:" for="senha"/>  
<h:inputSecret id="senha" label="Senha" value="#{usuarioBean.usuario.senha}" required="true"/>  
<h:outputLabel value="Confirmar Senha" for="confirmasenha"/>  
<h:inputSecret id="confirmasenha" label="Confirmar Senha" value="#{usuarioBean.confirmaSenha}" required="true"/>  
<h:outputText />  
<h:commandButton action="#{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

[quote=darksteel3000]Mano troca essa parte:

&lt;url-pattern&gt;*.jsf.&lt;/url-pattern&gt;

Por esta:

&lt;url-pattern&gt;*.jsf&lt;/url-pattern&gt;

Valew pelo toque, foi um detalhe que passou despersebido

G

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!

G

package financeiro.web;

import javax.faces.application.FacesMessage;

import javax.faces.bean.ManagedBean;

import javax.faces.bean.RequestScoped;

import javax.faces.context.FacesContext;

//adicione a importação da classe USUARIO(entidade) </blockquote>

Qual import?

G

package financeiro.web;

import javax.faces.application.FacesMessage;

import javax.faces.bean.ManagedBean;

import javax.faces.bean.RequestScoped;

import javax.faces.context.FacesContext;

//adicione a importação da classe USUARIO(entidade) </blockquote>

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

Se alguém souber responder, por favor de sua sugestão!
Att Augusto.

Criado 15 de março de 2013
Ultima resposta 17 de mar. de 2013
Respostas 16
Participantes 5