Fórum Ajuda POR FAVOR!!! struts+hibernate #390362
11/11/2010
0
Vanessa
Curtir tópico
+ 0Posts
11/11/2010
Davi Costa
Se estiver é problema na página.
Abaixo segue um exemplo de mapeamento:
//class Cliente
@OneToMany(mappedBy="cliente")
private List<SubCliente> subClientes;
//class SubCliente
@ManyToOne(fetch=FetchType.EAGER)
@JoinColumn(name = "CD_CLIENTE", nullable = false)
private Cliente cliente;
Caso vc queira deixá-lo bidirecional.
Senão basyta colocar assim, não faz mais refência na tabela Cliente:
//class SubCliente
@ManyToOne(fetch=FetchType.EAGER)
@JoinColumn(name = "CD_CLIENTE", nullable = false)
private Cliente cliente;
Att Davi
Gostei + 0
11/11/2010
Vanessa
@Cascade(CascadeType.SAVE_UPDATE)
private List<Dentista> dentista; Na classe Dentista @ManyToOne(fetch = FetchType.EAGER)
@JoinColumn(name = "cod_cidade", insertable = true, updatable = true)
@Fetch(FetchMode.JOIN)
@Cascade(CascadeType.SAVE_UPDATE)
private Cidade cidade; mais acho que o problema esta na ACTION, na verdade nao sei direito como fazer lá... vc poderia me da um exemplo de como ficaria um cadastro assim? MUITO OBRIGADA!!!!
Gostei + 0
11/11/2010
Vanessa
Gostei + 0
11/11/2010
Davi Costa
Tenta ver como debugar, para ver se está vindo null no objeto dentista, talvez seja aí seu problema.
Att Davi
Gostei + 0
12/11/2010
Vanessa
Tenta ver como debugar, para ver se está vindo null no objeto dentista, talvez seja aí seu problema.
Att Davi
public String inserirDentista() {
DentistaDao dd = new DentistaDao();
dentista.setCidade(cidade);
if (validadorCampos()) {
if (dd.cadastraDentista(dentista)) {
lista = pd.listarDentistas();
return "sucessoDentista";
} else
return "erro";
} else {
return "incorreto";
}
}<s:select list="cidades" name="cidade.cidade" label="Cidade"/>
Gostei + 0
12/11/2010
Davi Costa
dd.cadastraDentista(dentista)
Coloca a implementação dele.Essa lista de cidades vem do banco né?
Porque se não vier primeiro vc teria que inserir a cidade.
Bom para debugar vai depender da IDE que estiver usando.
Quando levantar o servidor a primeira coisa que vai fazer e subir em modo debug.
Depois na linha de código que vc que inspecionar vc coloca um break-point, vai na esquerda onde fica as linhas (na verdade os números das linhas) e clica duas vezes com o mouse.
Quando a aplicação para lá vc seleciona com o mouse o seu objeto dentisata antes de ser salvo e clica c o botão direito e inspeciona esse objeto e vai como estáseus atributos.
Outra coisa mostra mais código da sua página, se possível pode até colocá-la inteira.
Att Davi
Gostei + 0
12/11/2010
Vanessa
dd.cadastraDentista(dentista)
Coloca a implementação dele.Essa lista de cidades vem do banco né?
Porque se não vier primeiro vc teria que inserir a cidade.
Att Davi
public boolean cadastraDentista(Dentista dentista) {
s.save(dentista);
t.commit();
if (t.wasCommitted()) {
return true;
} else {
return false;
}
}
<fieldset style="width: 567px;"> <legend>CADASTRO DE PACIENTES</legend> <s:actionerror/> <s:actionmessage/> <s:form action="dentista!inserirDentista" method="post" validate="true" theme="css_xhtml"> <s:hidden name="dentista.cod_dentista"/> <table> <tr> <th>CPF:</th> <th colspan="5"><s:textfield name="dentista.cpf"/></th> </tr> <tr> <th>Nome:</th> <th colspan="5"><s:textfield name="dentista.nome" size="62" /></th> </tr> <tr> <td>Sexo:</td> <td><s:textfield name="dentista.sexo" size="2" /></td> <th>Idade:</th> <td><s:textfield name="dentista.idade" size="3" /></td> <th>Data de nascimento:</th> <td><s:textfield name="dentista.nascto" size="10"/></td> </tr> <tr> <td>E-mail:</td> <td colspan="5"><s:textfield name="dentista.email" size="62"/></td> </tr> <tr> <td>Endereço:</td> <td colspan="5"><s:textfield name="dentista.endereco" size="62"/></td> </tr> <tr> <td>Bairro:</td> <td colspan="2"><s:textfield name="dentista.bairro" size="15"/></td> <td>Cidade:</td> <td colspan="2"><s:select list="cidades" name="cidade.cidade."/></td> </tr> <tr> <td>CEP:</td> <td colspan="2"><s:textfield name="dentista.cep" /></td> </tr> <tr> <td>Telefone:</td> <td><s:textfield name="dentista.tel_fixo" size="10" /></td> </tr> <tr> <td colspan="3"><s:submit value="GRAVAR" /></td> <td colspan="3"><s:reset value="Limpar" /></td> </tr> </table> </s:form> </fieldset>
Gostei + 0
12/11/2010
Vanessa
Porque se não vier primeiro vc teria que inserir a cidade.
Gostei + 0
12/11/2010
Davi Costa
http://www.vaannila.com/struts-2/struts-2-example/struts-2-ui-tags-example-1.html
Acredito que ajudar muito, inclusive dá para baixar os fontes dele.
Att Davi
Gostei + 0
12/11/2010
Vanessa
dentista.setCidade(cidade);
Gostei + 0
12/11/2010
Davi Costa
public String inserirDentista() { DentistaDao dd = new DentistaDao();if(cidade == null){ System.out.println("A cidade está nula o problema está aqui!");
}
dentista.setCidade(cidade); if (validadorCampos()) { if (dd.cadastraDentista(dentista)) { lista = pd.listarDentistas(); return "sucessoDentista"; } else return "erro"; } else { return "incorreto"; } }Se no console não imprimir essa linha de código então talvez seu mapeamneto do hibernate não esteja 100%, altera o mapeamento do hibernate para aquele que te passei, pois uso em uma aplicação minha e tenho certeza que funciona.
Att Davi
Gostei + 0
12/11/2010
Davi Costa
<td colspan="2"><s:select list="cidades" name="cidade.cidade."/></td>
Para :
<td colspan="2"><s:select list="cidades" name="cidade"/></td>
É por isso que a cidade está chegando null.
Att Davi
Gostei + 0
12/11/2010
Vanessa
Att Davi
Gostei + 0
12/11/2010
Davi Costa
Aletra a página para ficar desse modo.
<td colspan="2"><s:select list="cidades" name="dentista.cidade"/></td>
E no seu Action :
public String inserirDentista() { DentistaDao dd = new DentistaDao();//retirado esse trecho antigo e coloca esse para testar
if(dentista.getCidade() != null ){
System.out.println("Problema de cidade vir null está corrigido.");
}
if (validadorCampos()) { if (dd.cadastraDentista(dentista)) { lista = pd.listarDentistas(); return "sucessoDentista"; } else return "erro"; } else { return "incorreto"; } }
Gostei + 0
12/11/2010
Vanessa
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)