Bom dia pessoa, estou com erro aqui que é muito estranho. Vou tentar explicar da melhor forma possível. Estou fazendo um sistema de controle pessoal, para estudar mesmo pois só iniciante ainda. E estou com o seguinte problema. Eu fiz o cadastro de usuários e cadastro de contas bancárias. No cadastro de usuário, eu já deixei a opção para o usuário cadastrar sua primeira conta na hora do registro. Ele só pede o valor "descrição" e "saldo inicial". O problema é o seguinte: Quando eu crio a conta já no cadastro, ele salva todos os dados perfeitamente no banco de dados. Ao listar as contas ele me traz, descrição, data, saldo inicial, se é favorita ou não, e as opções de editar e excluir. Tudo isso é salvo perfeitamente no Banco de Dados. Porém, quando eu tento adicionar uma nova conta na pagina de contas, o que acontece é o seguinte. Eu coloco a descrição, coloco o saldo inicial. Mas no banco de dados, ele não está pegando nem a Descrição e nem o Saldo Inicial. O resto vai normalmente. Veja como fica no banco de dados, as 2 contas que estão com as informações completas foram criadas na hora do registro, as outras pela pagina de contas. view plaincopy to clipboardprint? +-----------+-------------+------------+---------------------+---------------+----------+ | cod_conta | cod_usuario | des_conta | dat_cadastro | saldo_inicial | favorita | +-----------+-------------+------------+---------------------+---------------+----------+ | 8 | 1 | Banco Itau | 2011-09-13 18:24:54 | 1000 | | | 12 | 1 | NULL | 2011-09-13 21:56:32 | 0 | | | 13 | 1 | NULL | 2011-09-13 21:57:15 | 0 | | | 14 | 2 | Banco HSBC | 2011-09-13 21:58:24 | 10000 | | | 18 | 2 | NULL | 2011-09-13 22:56:59 | 0 | | +-----------+-------------+------------+---------------------+---------------+----------+ Alguém tem alguma idéia do que pode ser? Vou postar os codigos fontes, talvez alguém possa me ajudar. Classe Conta package financeiro.conta;
import java.io.Serializable;
import java.util.Date;
import javax.persistence.Entity;
import javax.persistence.*;
import javax.persistence.Table;
import org.hibernate.annotations.*;
import financeiro.usuario.Usuario;
@Entity
@Table(name="conta_bancaria")
public class Conta implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue
@Column(name="cod_conta")
private Integer conta;
@ManyToOne
@OnDelete(action=OnDeleteAction.CASCADE)
@JoinColumn(name = "cod_usuario", nullable = false)
private Usuario usuario;
@Column(name="des_conta")
private String descricao;
@Column(name="dat_cadastro", nullable = false, updatable = false)
private Date dataCadastro;
@Column(name="saldo_inicial")
private float saldoInicial;
@Column(name="favorita")
private boolean favorita;
public Integer getConta() {
return conta;
}
public void setConta(Integer conta) {
this.conta = conta;
}
public Usuario getUsuario() {
return usuario;
}
public void setUsuario(Usuario usuario) {
this.usuario = usuario;
}
public String getDescricao() {
return descricao;
}
public void setDescricao(String descricao) {
this.descricao = descricao;
}
public Date getDataCadastro() {
return dataCadastro;
}
public void setDataCadastro(Date dataCadastro) {
this.dataCadastro = dataCadastro;
}
public float getSaldoInicial() {
return saldoInicial;
}
public void setSaldoInicial(float saldoInicial) {
this.saldoInicial = saldoInicial;
}
public boolean isFavorita() {
return favorita;
}
public void setFavorita(boolean favorita) {
this.favorita = favorita;
}
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + ((conta == null) ? 0 : conta.hashCode());
result = prime * result + ((dataCadastro == null) ? 0 : dataCadastro.hashCode());
result = prime * result + ((descricao == null) ? 0 : descricao.hashCode());
result = prime * result + (favorita ? 1231 : 1237);
result = prime * result + ((usuario == null) ? 0 : usuario.hashCode());
result = prime * result + Float.floatToIntBits(saldoInicial);
return result;
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
Conta other = (Conta) obj;
if (conta == null) {
if (other.conta != null)
return false;
} else if (!conta.equals(other.conta))
return false;
if (dataCadastro == null) {
if (other.dataCadastro != null)
return false;
} else if (!dataCadastro.equals(other.dataCadastro))
return false;
if (descricao == null) {
if (other.descricao != null)
return false;
} else if (!descricao.equals(other.descricao))
return false;
if (favorita != other.favorita)
return false;
if (usuario == null) {
if (other.usuario != null)
return false;
} else if (!usuario.equals(other.usuario))
return false;
if (Float.floatToIntBits(saldoInicial) != Float.floatToIntBits(other.saldoInicial))
return false;
return true;
}
}
Classe ContaDAO
package financeiro.conta;
import java.util.List;
import financeiro.usuario.Usuario;
public interface ContaDAO {
public void salvar(Conta conta);
public void excluir(Conta conta);
public Conta carregar(Integer conta);
public List<Conta> listar(Usuario usuario);
public Conta buscarFavorita(Usuario usuario);
}
Classe ContaDAOHibernate
package financeiro.conta;
import java.util.List;
import org.hibernate.Criteria;
import org.hibernate.Session;
import org.hibernate.criterion.Restrictions;
import financeiro.usuario.Usuario;
public class ContaDAOHibernate implements ContaDAO {
private Session session;
public void setSession(Session session) {
this.session = session;
}
@Override
public void excluir(Conta conta) {
this.session.delete(conta);
}
@Override
public void salvar(Conta conta) {
this.session.saveOrUpdate(conta);
}
@Override
public Conta carregar(Integer conta) {
return (Conta) this.session.get(Conta.class, conta);
}
@SuppressWarnings("unchecked")
@Override
public List<Conta> listar(Usuario usuario) {
Criteria criteria = this.session.createCriteria(Conta.class);
criteria.add(Restrictions.eq("usuario", usuario));
return criteria.list();
}
@Override
public Conta buscarFavorita(Usuario usuario) {
Criteria criteria = this.session.createCriteria(Conta.class);
criteria.add(Restrictions.eq("usuario", usuario));
criteria.add(Restrictions.eq("favorita", true));
return (Conta) criteria.uniqueResult();
}
}
Classe ContaRN
package financeiro.conta;
import java.util.Date;
import java.util.List;
import financeiro.usuario.Usuario;
import financeiro.util.DAOFactory;
public class ContaRN {
private ContaDAO contaDAO;
public ContaRN() {
this.contaDAO = DAOFactory.criarContaDAO();
}
public List<Conta> listar(Usuario usuario) {
return this.contaDAO.listar(usuario);
}
public Conta carregar(Integer conta) {
return this.contaDAO.carregar(conta);
}
public void salvar(Conta conta) {
conta.setDataCadastro(new Date());
this.contaDAO.salvar(conta);
}
public void excluir(Conta conta) {
this.contaDAO.excluir(conta);
}
public void tornarFavorita(Conta contaFavorita) {
Conta conta = this.buscarFavorita(contaFavorita.getUsuario());
if (conta != null) {
conta.setFavorita(false);
this.contaDAO.salvar(conta);
}
contaFavorita.setFavorita(true);
this.contaDAO.salvar(contaFavorita);
}
public Conta buscarFavorita(Usuario usuario) {
return this.contaDAO.buscarFavorita(usuario);
}
}
Classe ContaBean
package financeiro.web;
import java.util.List;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.RequestScoped;
import financeiro.conta.Conta;
import financeiro.conta.ContaRN;
import financeiro.web.util.ContextoUtil;
@ManagedBean(name="contaBean")
@RequestScoped
public class ContaBean {
private Conta selecionada = new Conta();
private List<Conta> lista = null;
public void salvar(){
ContextoBean contextoBean = ContextoUtil.getContextoBean();
this.selecionada.setUsuario(contextoBean.getUsuarioLogado());
ContaRN contaRN = new ContaRN();
contaRN.salvar(this.selecionada);
this.selecionada = new Conta();
this.lista = null;
}
public void editar(){
}
public void excluir(){
ContaRN contaRN = new ContaRN();
contaRN.excluir(this.selecionada);
this.selecionada = new Conta();
this.lista = null;
}
public void tornarFavorita(){
ContaRN contaRN = new ContaRN();
contaRN.tornarFavorita(this.selecionada);
this.selecionada = new Conta();
}
public Conta getSelecionada() {
return selecionada;
}
public void setSelecionada(Conta selecionada) {
this.selecionada = selecionada;
}
public List<Conta> getLista() {
if(this.lista == null){
ContextoBean contextoBean = ContextoUtil.getContextoBean();
ContaRN contaRN = new ContaRN();
this.lista = contaRN.listar(contextoBean.getUsuarioLogado());
}
return this.lista;
}
public void setLista(List<Conta> lista) {
this.lista = lista;
}
}
Classe UsuarioBean (onde eu inserir a opçao de cadastrar conta na hora do registro de usuario.
package financeiro.web;
import java.util.List;
import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.RequestScoped;
import javax.faces.context.FacesContext;
import financeiro.conta.Conta;
import financeiro.conta.ContaRN;
import financeiro.usuario.Usuario;
import financeiro.usuario.UsuarioRN;
@ManagedBean(name = "usuarioBean")
@RequestScoped
public class UsuarioBean {
public Conta getConta() {
return conta;
}
public void setConta(Conta conta) {
this.conta = conta;
}
public void setLista(List<Usuario> lista) {
this.lista = lista;
}
private Usuario usuario = new Usuario();
private String confirmarSenha;
private List<Usuario> lista;
private String destinoSalvar;
private Conta conta = new Conta();
public String novo() {
this.destinoSalvar = "usuarioSucesso";
this.usuario = new Usuario();
this.usuario.setAtivo(true);
return "usuario";
}
public String editar(){
this.confirmarSenha = this.usuario.getSenha();
return "/publico/usuario";
}
public String salvar() {
FacesContext context = FacesContext.getCurrentInstance();
String senha = this.usuario.getSenha();
if (!senha.equals(this.confirmarSenha)) {
FacesMessage facesMessage = new FacesMessage(
"A senha não foi informada corretamente");
context.addMessage(null, facesMessage);
return null;
}
UsuarioRN usuarioRN = new UsuarioRN();
usuarioRN.salvar(this.usuario);
if(this.conta.getDescricao() != null){
this.conta.setUsuario(this.usuario);
this.conta.setFavorita(true);
ContaRN contaRN = new ContaRN();
contaRN.salvar(this.conta);
}
return this.destinoSalvar;
}
public String excluir(){
UsuarioRN usuarioRN = new UsuarioRN();
usuarioRN.excluir(this.usuario);
this.lista = null;
return null;
}
public String ativar(){
if(this.usuario.isAtivo()){
this.usuario.setAtivo(false);
} else {
this.usuario.setAtivo(true);
}
UsuarioRN usuarioRN = new UsuarioRN();
usuarioRN.salvar(this.usuario);
return null;
}
public List<Usuario> getLista(){
if(this.lista == null){
UsuarioRN usuarioRN = new UsuarioRN();
this.lista = usuarioRN.listar();
}
return this.lista;
}
public String atribuirPermissao(Usuario usuario, String permissao){
this.usuario = usuario;
java.util.Set<String> permissoes = this.usuario.getPermissao();
if(permissoes.contains(permissao)){
permissoes.remove(permissao);
} else {
permissoes.add(permissao);
}
return null;
}
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result
+ ((confirmarSenha == null) ? 0 : confirmarSenha.hashCode());
result = prime * result + ((conta == null) ? 0 : conta.hashCode());
result = prime * result
+ ((destinoSalvar == null) ? 0 : destinoSalvar.hashCode());
result = prime * result + ((lista == null) ? 0 : lista.hashCode());
result = prime * result + ((usuario == null) ? 0 : usuario.hashCode());
return result;
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
UsuarioBean other = (UsuarioBean) obj;
if (confirmarSenha == null) {
if (other.confirmarSenha != null)
return false;
} else if (!confirmarSenha.equals(other.confirmarSenha))
return false;
if (conta == null) {
if (other.conta != null)
return false;
} else if (!conta.equals(other.conta))
return false;
if (destinoSalvar == null) {
if (other.destinoSalvar != null)
return false;
} else if (!destinoSalvar.equals(other.destinoSalvar))
return false;
if (lista == null) {
if (other.lista != null)
return false;
} else if (!lista.equals(other.lista))
return false;
if (usuario == null) {
if (other.usuario != null)
return false;
} else if (!usuario.equals(other.usuario))
return false;
return true;
}
public Usuario getUsuario() {
return usuario;
}
public void setUsuario(Usuario usuario) {
this.usuario = usuario;
}
public String getConfirmarSenha() {
return confirmarSenha;
}
public void setConfirmarSenha(String confirmarSenha) {
this.confirmarSenha = confirmarSenha;
}
public String getDestinoSalvar() {
return destinoSalvar;
}
public void setDestinoSalvar(String destinoSalvar) {
this.destinoSalvar = destinoSalvar;
}
}
e os JSF
Tela de cadastro de conta
<?xml version="1.0" encoding="UTF-8" ?>
<!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"
xmlns:sec="http://www.springframework.org/security/facelets/tags">
<h:head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>Cadastro de Contas</title>
</h:head>
<h:body>
<h1>Cadastro de Contas</h1>
<h:form id="edicao">
<h:messages />
<h:inputHidden value="#{contaBean.selecionada.conta }" />
<h:inputHidden value="#{contaBean.selecionada.favorita }" />
<h:panelGrid columns="2">
<h:outputLabel value="Descrição: " for="descricao" />
<h:inputText id="descricao"
value="#{contaBean.selecionada.descricao }" required="true"
maxLength="45" />
<h:outputLabel value="Saldo Inicial: " for="saldoInicial" />
<h:inputText id="saldoInicial"
value="#{contaBean.selecionada.saldoInicial }" size="10">
<f:convertNumber minFractionDigits="2" />
</h:inputText>
<h:commandButton value="Salvar" action="#{contaBean.salvar }">
<f:ajax excute="@form" render=":edicao :listagem" />
</h:commandButton>
</h:panelGrid>
</h:form>
<h:form id="listagem">
<h:dataTable value="#{contaBean.lista }" var="conta"
rendered="#{!empty contaBean.lista }">
<h:column>
<f:facet name="header">Descrição</f:facet>
#{conta.descricao}
</h:column>
<h:column>
<f:facet name="header">Data Cadastro</f:facet>
<h:outputText value="#{conta.dataCadastro }">
<f:convertDateTime pattern="dd/MM/yyyy" />
</h:outputText>
</h:column>
<h:column>
<f:facet name="header">Saldo Inicial</f:facet>
<h:outputText value="#{ conta.saldoInicial}"
style="text-align: right; display:block;">
<f:convertNumber minFractionDigits="2" />
</h:outputText>
</h:column>
<h:column>
<h:commandLink action="#{contaBean.tornarFavorita }">
<f:ajax execute="@this" render=":listagem" />
<h:graphicImage library="imagens"
name="favorita16_#{conta.favorita }.png" />
<f:setPropertyActionListener value="#{conta }"
target="#{contaBean.selecionada }" />
</h:commandLink>
</h:column>
<h:column>
<h:commandLink>
<f:ajax execute="@this" render=":edicao" />
<h:graphicImage library="imagens" name="editar16.png" />
<f:setPropertyActionListener value="#{conta }"
target="#{contaBean.selecionada }" />
</h:commandLink>
</h:column>
<h:column>
<h:commandLink action="#{contaBean.excluir }">
<f:ajax execute="@this" render=":listagem" />
<h:graphicImage library="imagens" name="excluir16.png" />
<f:setPropertyActionListener value="#{conta }"
target="#{contaBean.selecionada }" />
</h:commandLink>
</h:column>
</h:dataTable>
</h:form>
</h:body>
</html>
E no cadastro de usuario
<?xml version="1.0" encoding="UTF-8" ?>
<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>Cadasro de Usuarios</title>
</h:head>
<h:body>
<h1>Cadastro de Usuários</h1>
<h:form id="cadastro">
<h:messages />
<h:inputHidden value="#{usuarioBean.usuario.codigo }" />
<h:inputHidden value="#{usuarioBean.usuario.ativo }" />
<h:inputHidden value="#{usuarioBean.destinoSalvar}" />
<h:panelGrid columns="2">
<h:outputLabel value="Nome" for="nome" />
<h:inputText id="nome" Label="Nome"
value="#{usuarioBean.usuario.nome }" size="30" maxLength="30"
required="true" requiredMessage="Por favor, insira um nome">
<f:validateLength minimum="10" maximum="30" />
</h:inputText>
<h:outputLabel value="Data Nascimento" for="data" />
<h:inputText id="data" label="Data Nascimento"
value="#{usuarioBean.usuario.nascimento}" size="10" maxlength="10"
required="false">
<f:convertDateTime pattern="dd/MM/yyyy" />
</h:inputText>
<h:outputLabel value="Celular" for="celular" />
<h:inputText id="celular" label="Celular"
value="#{usuarioBean.usuario.celular}" size="10" />
<h:outputLabel value="E-mail" for="email" />
<h:panelGroup>
<h:inputText id="email" label="E-mail"
value="#{usuarioBean.usuario.email}" size="50" required="true"
validatorMessage="e-mail inválido">
<f:validateRegex pattern="[a-zA-Z0-9\-\_\.]+@[a-zA-Z0-9\-\_\.]+" />
</h:inputText>
<h:message for="email" />
</h:panelGroup>
<h:outputLabel value="Idioma" for="idioma" />
<h:selectOneMenu id="idioma" value="#{usuarioBean.usuario.idioma}">
<f:selectItem itemValue="pt_BR" itemLabel="Português" />
<f:selectItem itemValue="en_US" itemLabel="English" />
<f:selectItem itemValue="es_ES" itemLabel="Espanol" />
</h:selectOneMenu>
<h:outputLabel value="Login" for="login" />
<h:inputText id="login" label="Login"
value="#{usuarioBean.usuario.login}" size="15" maxlength="15"
required="true"
validatorMessage="Login deve ter no minimo 5 e no máximo 15 caracteres, e só pode ter simbolos '.' e '_'. ">
<f:validateRegex pattern="([a-z]|[0-9]|[.]|[_]){2,15}" />
</h:inputText>
<h:outputLabel value="Senha" for="senha" />
<h:inputSecret id="senha" label="Senha"
value="#{usuarioBean.usuario.senha}" size="10" maxlength="10"
required="true" redisplay="true" />
<h:outputLabel value="Confirmar senha" for="confirmarSenha" />
<h:inputSecret id="confirmarSenha" label="Confirmar senha"
value="#{usuarioBean.confirmarSenha}" size="10" maxlength="10"
required="true" redisplay="true" />
</h:panelGrid>
<h:panelGroup rendered="#{empty contextoBean.usuarioLogado}">
<fieldset><legend>Conta Inicial</legend>
<h:panelGrid columns="2">
<h:outputLabel value="Descrição" for="descricao" />
<h:inputText id="descricao" label="Descrição" value="#{usuarioBean.conta.descricao}" required="true" maxlength="45" />
<h:outputLabel value="Saldo inicial" for="saldoInicial" />
<h:inputText id="saldoInicial" label="Saldo Inicial" value="#{usuarioBean.conta.saldoInicial}" size="10">
<f:convertNumber minFractionDigits="2" />
</h:inputText>
</h:panelGrid>
</fieldset>
</h:panelGroup>
<h:commandButton action="#{usuarioBean.salvar}" value="Salvar" />
</h:form>
</h:body>
</html>
Obrigado.
Obrigado.