Ajuda POR FAVOR!!! struts+hibernate

Java

11/11/2010

Boa tarde,   preciso muito da ajuda de todos. ja assistir várias video aulas mais ainda não consegui resolver meu problema.   É o seguinte:   estou fazendo uma aplicação web que realiza um cadastro.   no banco de dados tenho duas tabelas: a cidade e a dentista: a relação entre as duas é um-para-muitos (OneToMany), ou seja, uma cidade tem muitos dentistas, certo?    fiz o relacionamento entre as tabelas (nas classes bean),  criando um uma lista de dentistas @OneToMany na tabela cidades e intanciei uma cidade @ManyToOne na tabela dentista.   Criei uma lista de Strings na CidadeDao que relaciona o nome todas as cidades encontratadas (cadastradas) em um <s:select> na interface.  para que na hora do cadastro do dentista o usuario escolha a cidade em que esta o dentista.     As cidades aparecem para escolha no cadastro mais quando grava não esta salvando a ligação entre as duas tabelas, ou seja, na tabela de dentista o campo cidade está NULL, ele não salva o id da tabela cidade.   A verdade é que é a primeira vez que faço isso... e estou precisando muito resolver este problema.   Por favor, se alguem tiver algum tutorial ou mesmo puder me explicar como fazer e salvar este relacionamento muitos-para-um, vou agradecer muito.
Vanessa

Vanessa

Curtidas 0

Respostas

Davi Costa

Davi Costa

11/11/2010

Vc já debugou para ver se no objeto dentista o campo cidade não está null.
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
Vanessa

Vanessa

11/11/2010

O codigo esta assim:   Na classe Cidade    @OneToMany(mappedBy = "cidade", fetch = FetchType.LAZY)
 @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
Vanessa

Vanessa

11/11/2010

Por favor, alguem me ajude!!!!  
GOSTEI 0
Davi Costa

Davi Costa

11/11/2010

Posta o código da sua Action e da sua página.
Tenta ver como debugar, para ver se está vindo null no objeto dentista, talvez seja aí seu problema.

Att Davi
GOSTEI 0
Vanessa

Vanessa

11/11/2010

Posta o código da sua Action e da sua página.
Tenta ver como debugar, para ver se está vindo null no objeto dentista, talvez seja aí seu problema.

Att Davi
Obrigada Davi!!!   o metodo da actio é esse:  
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";

}



}
e na JSP este:
<s:select list="cidades" name="cidade.cidade" label="Cidade"/>
Sobre debugar, realmente terei que ver como funciona!!! Vou dá uma pesquisada. Mais agradeço muito se vc conseguir encontrar o erro nestes códigos. Fico pensando que está faltando alguma coisa neste metodo de inserir mais não sei identificar o que? MUUUIIITO OBRIGADA!!!!
GOSTEI 0
Davi Costa

Davi Costa

11/11/2010

Provavelmente é nesse método que vc inseri :
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
Vanessa

Vanessa

11/11/2010

Provavelmente é nesse método que vc inseri :
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
      O cadastraDentista está na DentistaDao, é esse:
 
public boolean cadastraDentista(Dentista dentista) {

s.save(dentista);
t.commit();

if (t.wasCommitted()) {

return true;

} else {

return false;

}

}
 
      a JSP está assim:      
 
<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&ccedil;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>
 
  Ps.: coloquei só a parte do form pq a página toda é muito grande e a maioria é só código de html e css.   Novamente, MUUUIIITO OBRIGADA!!!

 

 
GOSTEI 0
Vanessa

Vanessa

11/11/2010

Essa lista de cidades vem do banco né?
Porque se não vier primeiro vc teria que inserir a cidade.

  Ah!! Sim, esta lista vem do banco e já tem cidades cadastradas lá!
GOSTEI 0
Davi Costa

Davi Costa

11/11/2010

Dá uma olhada nesse exemplo:

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
Vanessa

Vanessa

11/11/2010

Davi,   acabei de reparar que toda vez que cadastro um dentista na tabela de cidades tbm é acrescentado uma linha em branco, como se eu tivesse realizado uma inserção nela. Acho que é esta linha    
 dentista.setCidade(cidade); 
que está no metodo inserirDentista.

GOSTEI 0
Davi Costa

Davi Costa

11/11/2010

Faz também esse teste, altera esse método e deixa assim para verificar se a cidade não está vindo nula:
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
Davi Costa

Davi Costa

11/11/2010

Altera na sua página:

<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
Vanessa

Vanessa

11/11/2010

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
    Davi, realmente não imprimiu a linha, então eu fiz as alteraçoes do mapeamento e agora deu este erro na hora que executei:   description The server encountered an internal error () that prevented it from fulfilling this request. exception javax.servlet.ServletException: org.hibernate.PropertyValueException: not-null property references a null or transient value: bean.Dentista.cidade org.apache.struts2.dispatcher.Dispatcher.serviceAction(Dispatcher.java:518) org.apache.struts2.dispatcher.FilterDispatcher.doFilter(FilterDispatcher.java:421) root cause org.hibernate.PropertyValueException: not-null property references a null or transient value: bean.Dentista.cidade org.hibernate.engine.Nullability.checkNullability(Nullability.java:72)...... org.hibernate.PropertyValueException: not-null property references a null or transient value: bean.Dentista.cidade
GOSTEI 0
Davi Costa

Davi Costa

11/11/2010

Altera a página conforme eu sugeri, e ve se continua dando erro, se não testa assim:
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
Vanessa

Vanessa

11/11/2010

Nossa!!! Como está complicado pra mim!!! Já fiz todas as alteraçoes que vc sugeriu e nada... agora só dá aquele erro. vou assistir a video aula sobre mapeamento do hibernate, muitos para um, pra ver no que estou errando.   É a primeira vez que tento fazer algo assim e estou passando mal pra aprender.   Davi, muito obrigada pela ajuda. Se eu consegui resolver, posto aqui aonde eu estou errando tá!!! vlw mesmo, pelo menos já sei que o erro é no mapeamento.
GOSTEI 0
Davi Costa

Davi Costa

11/11/2010

Pois deixa teu mapeamento como estava antes.
E altera só a sua página e tenta fazer algum if na cidade e ver se ela está nula, e não só ela como o id dela se ela tiver ou algum outro atributo.

Acredito que o mapeamento q vc postou estava correto. O problema é realmente na cidade q está chegando na sua action.

Faz vários teste na página e na action ate ter certeza q o dentista está com a cidade correta. dá um getCidade().getId() se tiver para ver se não está nulo..

Att Davi
GOSTEI 0
Davi Costa

Davi Costa

11/11/2010

Só complementando esse erro aí q está dando é só pq a cidade está chegando null, não é q o mapeamento está incorrento é o objeto q vc tenta persistir é q está null ou transient(não veio do banco, por exemplo Cidade = new Cidade() não está nulo, mas tb não veio do banco).
Att Davi
GOSTEI 0
Vanessa

Vanessa

11/11/2010

Pois deixa teu mapeamento como estava antes.
  Davi, como é complicado hein!!!   voltei ao que estava antes e fiz as alteraçoes que vc recomendou e agora o erro é esse:     org.hibernate.AnnotationException: Collection has neither generic type or OneToMany.targetEntity() defined: bean.Cidade.dentista     o que será agora? ;-)
GOSTEI 0
Davi Costa

Davi Costa

11/11/2010

Então agora está vindo correto da página a cidade não é?
Então já matamos um problema que é do Action e da página.
Agora vc vai alterar seu mapeamentoconforme te mandei o exemplo de cliente e subcliente só para testar.

Verifica também outras coisas na entidade,se tem id... vc pode até colocar aqui o código das duas entidades.

att Davi
GOSTEI 0
Vanessa

Vanessa

11/11/2010

  Verifica também outras coisas na entidade,se tem id... vc pode até colocar aqui o código das duas entidades.

att Davi
  DAVI, funcionou!!!   só que agora está gravando nas duas tabelas do banco, (na dentista e na cidade).   como faço pra gravar só na dentista? na tabela cidade só vai buscar as que já estão cadastradas?   Acho que é aquele relacionamento unilateral.   muitos dentistas para uma cidade... não preciso fazer vários cadastros para a mesma cidade certo? COMO FAÇO ISSO?     MUUUUIIITO OBRIGADA!!!  
GOSTEI 0
Davi Costa

Davi Costa

11/11/2010

Vc está usando o mapeamento conforme eu postei, poruqe conforme vc postou tinha esse trecho na entidade dentista:


 @JoinColumn(name = "cod_cidade", insertable = true, updatable = true)


O fato de estar unilateral não tem problema algum, isso só vai interferir na consulta.
Por exemplo caso na sua aplicação vc vai querer listar os Dentistas pela cidade vale a pena vc deixar bidirecional, senão não há necessidade.

Posta só como ficou esse relacionamento de Cidade e Dentista como vc havia colocado antes.

att Davi
GOSTEI 0
Vanessa

Vanessa

11/11/2010

Vc está usando o mapeamento conforme eu postei, poruqe conforme vc postou tinha esse trecho na entidade dentista:


 @JoinColumn(name = "cod_cidade", insertable = true, updatable = true)


O fato de estar unilateral não tem problema algum, isso só vai interferir na consulta.
Por exemplo caso na sua aplicação vc vai querer listar os Dentistas pela cidade vale a pena vc deixar bidirecional, senão não há necessidade.

Posta só como ficou esse relacionamento de Cidade e Dentista como vc havia colocado antes.

att Davi
Vaje como está:     Cidade.java
 
package bean;

import java.io.Serializable;
import java.util.List;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.OneToMany;
import javax.persistence.Table;

 
@Entity
@Table(name = "cidade")
public class Cidade implements Serializable {

@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column
private int cod_cidade;
@Column
private String cidade;
@Column
private String uf;
@OneToMany(mappedBy = "cidade")
private List<Dentista> dentista;


 


  e a classe dentista    
 
package bean;

import java.io.Serializable;
import java.util.Date;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.Table;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;

@Entity
@Table(name = "paciente")
public class Dentista implements Serializable {

@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column
private int cod_dentista;
@Column(length = 50)
private String nome;
@Column(length = 15)
private String cpf;
@Column(length = 1)
private String sexo;
@Column
private int tel_fixo;
@Column
private int tel_celular;
@Column(length = 40)
private String endereco;
@Column(length = 30)
private String bairro;
@ManyToOne(fetch = FetchType.EAGER)
@JoinColumn(name = "cod_cidade", nullable = false)
private Cidade cidade;

@Column(length = 30)
private String email;
@Column(length = 2)
private String uf;
@Column
private int cep;
...getters e setters...
 
 
 


GOSTEI 0
Davi Costa

Davi Costa

11/11/2010

Exato é isto mesmo está correto.
Será que essa cidade está vindo realmente do banco na sua tela.
Tenta ver o id da cidade antes de chamar o método de inserir o dentista, para ver se a cidade tem id diferente de null. Por que se tiver id, não era para estar inserindo a cidade.
Estou colocando abaixo um exemplo de mapeamento completo de clientes e subclientes para vc dar uma olhada:

@Entity(name = "SubCliente")
@Table(name = "TB_SUB_CLIENTE")
public class SubCliente implements Serializable{

    /**
     *
     */
    private static final long serialVersionUID = 1275724149278563701L;
   
    @Id
    @SequenceGenerator( name = "subCliente_id", sequenceName = "subCliente_seq", allocationSize = 1 )
    @GeneratedValue(strategy=GenerationType.SEQUENCE,generator="subCliente_id")
    @Column(name = "CD_SUBCLIENTE", nullable = false)
    private Long id;
   
    @NotNull
    @Column(name = "CODIGO", length = 4, nullable = false)
    private String codSubCliente;
   
    @NotNull
    @Column(name = "NOME_SUBCLIENTE")
    private String nomeSubcliente;

    @Column(name = "ENDERECO")
    private String endereco;

    @Column(name = "BAIRRO")
    private String bairro;

    @Column(name = "CIDADE")
    private String cidade;

    @Column(name = "UF", length = 2)
    private String uf;

    @Column(name = "CEP")
    private String cep;

    @Column(name = "FONE")
    private String fone;
   
    @Column(name = "COMP")
    private String complemento;

    @NotNull
    @ManyToOne(fetch=FetchType.EAGER)
    @JoinColumn(name = "CD_CLIENTE", nullable = false)
    private Cliente cliente;

//getters e setters omitidos, equals e hashCode (vc os implementou né?)




@Entity(name = "Cliente")
@Table(name = "TB_CLIENTE")
public class Cliente implements Serializable{

    /**
     *
     */
    private static final long serialVersionUID = -1598352828685913699L;
   
    @Id
    @SequenceGenerator( name = "cliente_id", sequenceName = "cliente_seq", allocationSize = 1 )
    @GeneratedValue(strategy=GenerationType.SEQUENCE,generator="cliente_id")
    @Column(name = "CD_CLIENTE", nullable = false)
    private Long id;
   
    @NotNull
    @Pattern(regex="[0-9]")
    @Column(name = "CODIGO", length = 4, nullable = false)
    private String codCliente;

    @Column(name = "NOME_CLIENTE", length = 100, nullable = false)
    private String nomeCliente;

    @Column(name = "RAZAO_SOCIAL")
    private String razaoSocial;

    @Column(name = "CNPJ_CGC")
    private String cnpjCgc;

    @Column(name = "CGF")
    private Long cgf;

    @Column(name = "ENDERECO")
    private String endereco;

    @Column(name = "COMP")
    private String complemento;

    @Column(name = "BAIRRO")
    private String bairro;

    @Column(name = "CIDADE")
    private String cidade;

    @Column(name = "UF", length = 2)
    private String uf;

    @Column(name = "CEP")
    private String cep;

    @Column(name = "FONE")
    private String fone;

    @Column(name = "SITE")
    private String site;
   
    @OneToMany(mappedBy="cliente")
    private List<SubCliente> subClientes;

//getters e setters omitidos

No código com fundo amarelo mais em destaque eu perguntei se vc implementou equals e hashCode, porque se vc não implementou o hibernate nãotem como saber quando uma cidade é diferente da outra, por isso ele está inserindo mais um registro.

att Davi
GOSTEI 0
Davi Costa

Davi Costa

11/11/2010

Identifiquei outro problema, na declaração da classe Dentista:

@Entity @Table(name = "paciente") public class Dentista implements Serializable {
Esse valor de name="paciente" está correto?

Att Davi
GOSTEI 0
Vanessa

Vanessa

11/11/2010

    //getters e setters omitidos, equals e hashCode (vc os implementou né?)

No código com fundo amarelo mais em destaque eu perguntei se vc implementou equals e hashCode, porque se vc não implementou o hibernate nãotem como saber quando uma cidade é diferente da outra, por isso ele está inserindo mais um registro.

att Davi
    Davi,   não implementei não...   pra falar a verdade nem sei como fazer... vc pode me dá um exemplo?
GOSTEI 0
Vanessa

Vanessa

11/11/2010

Identifiquei outro problema, na declaração da classe Dentista:

@Entity @Table(name = "paciente") public class Dentista implements Serializable {
Esse valor de name="paciente" está correto?

Att Davi
Hum!!! Não...ALTEREI.   Falta de atenção minha!!! culpa do Ctrl+C Ctrl+V.
GOSTEI 0
Davi Costa

Davi Costa

11/11/2010

Qual sua IDE?
Se for Eclipse, voce vai pressionar o botão direito sobre a classe e escolher a opção Source --> Generate hashCode() and equal()... Vai se abrir uma janela com os atributos da classe, vc só vai selecionar o id.

Faz isso nas duas classes.

se etiver usando o Netbeans não sei de cabeça, mas é algo muito parecido com o eclipse clica c o botão direito na classe e e procura algo parecido com o eclipse.

att Davi
GOSTEI 0
Vanessa

Vanessa

11/11/2010

Qual sua IDE?
Se for Eclipse, voce vai pressionar o botão direito sobre a classe e escolher a opção Source --> Generate hashCode() and equal()... Vai se abrir uma janela com os atributos da classe, vc só vai selecionar o id.

Faz isso nas duas classes.

se etiver usando o Netbeans não sei de cabeça, mas é algo muito parecido com o eclipse clica c o botão direito na classe e e procura algo parecido com o eclipse.

att Davi
      é o Eclipse
GOSTEI 0
Davi Costa

Davi Costa

11/11/2010

OK. Pois faz os passos que comentei nas duas entidades, testa e me passa o feedBack depois.

Tb atenta para aquela questão do id da cidade que está sendo setada para o dentista (antes de inserir o dentista), se o id da Cidade está vindo nulo é pq não está vindo do banco, pode ser por isso que está dando um insert na Cidade.

Att Davi
GOSTEI 0
Vanessa

Vanessa

11/11/2010

Que erro é esse?   FreeMarker template error!Expression stack.findValue('top') is undefined on line 48, column 32 in template/simple/select.ftl. The problematic instruction: ---------- ==> assignment: itemKey=stack.findValue('top').toString() [on line 48, column 13 in template/simple/select.ftl] in user-directive s.iterator [on line 40, column 1 in template/simple/select.ftl] in include "/${parameters.templateDir}/simple/select.ftl" [on line 3, column 1 in template/css_xhtml/select.ftl] ---------- Java backtrace for programmers: ---------- freemarker.core.InvalidReferenceException: Expression stack.findValue('top') is undefined on line 48, column 32 in template/simple/select.ftl. at freemarker.core.TemplateObject.assertNonNull(TemplateObject.java:124) at freemarker.core.TemplateObject.invalidTypeException(TemplateObject.java:134) at freemarker.core.Dot._getAsTemplateModel(Dot.java:78)                        Está aparecendo na interface, logo abaixo do campo cidade. Esta ultima vez que rodei.
GOSTEI 0
Davi Costa

Davi Costa

11/11/2010

Honestamente não conheço,
mas se a telanão dava e agora está dando, será q vc n digitou algo nela sem kerer... dá um ctrl +z na página p ver se vc n digitou algum aracter sem kerer q quebrou sua página. Ou deu tudo certo e deveria ser redirecionado para outra tela.. e essa outra tela tá kebrada?... mas realmente não conheço esse erro :/


Att Davi
GOSTEI 0
Vanessa

Vanessa

11/11/2010

vou revisar meu código todo.   Acho que é a jsp.
GOSTEI 0
Davi Costa

Davi Costa

11/11/2010

Mas vc acha que está cadastrando direitim no banco, conforme vc keria?

Revisa tudo e pasa feedBack depois.
Bom trabalho!

Att Davi
GOSTEI 0
Vanessa

Vanessa

11/11/2010

  Revisa tudo e pasa feedBack depois.
Bom trabalho!

Att Davi
    Vou verificar! eu acho que sim!! Vou revisar e depois te mando um recado.   MUUUIIITO OBRIGADA PELA ATENÇÃO VALEU MESMO!!!
GOSTEI 0
Vanessa

Vanessa

11/11/2010

[ Vou revisar e depois te mando um recado.  
  Davi,   revisei todo código... não vi erros. Então  retirei a tag:
 
<s:select list="cidades" name="cidade"/>
 

  e aí não aparaceu erro nenhum. O problema é nesta tag. Já tentei de várias formas:  
 
<s:select list="cidades" name="cidade.cidade"/>
 

<s:select list="cidades" name="dentista.cidade"/>

    Mais qualquer coisa que eu coloque aí dá erro.   será que este é a forma correta de fazer?
GOSTEI 0
Davi Costa

Davi Costa

11/11/2010

segue abaixo um exemplo de uso dessa tag:

<s:select name="country" list="countryList" listKey="countryId" listValue="countryName" headerKey="0" headerValue="Country"label="Select a country" />

Retirado justamente daquele link que te passei:
http://www.vaannila.com/struts-2/struts-2-example/struts-2-ui-tags-example-1.html

O que mais me impressiona era q antes aparecia normalmente ou não?

na Action te esse atributo cidade e seus respectivos getters and setters?.. a Tela pelo menos aparece e só dá erro depois? Ou nem renderiza para ser salvo o Dentista?

Att Davi




GOSTEI 0
Vanessa

Vanessa

11/11/2010

segue abaixo um exemplo de uso dessa tag:

<s:select name="country" list="countryList" listKey="countryId" listValue="countryName" headerKey="0" headerValue="Country" label="Select a country" />

Retirado justamente daquele link que te passei:
http://www.vaannila.com/struts-2/struts-2-example/struts-2-ui-tags-example-1.html

O que mais me impressiona era q antes aparecia normalmente ou não?

na Action te esse atributo cidade e seus respectivos getters and setters?.. a Tela pelo menos aparece e só dá erro depois? Ou nem renderiza para ser salvo o Dentista?

Att Davi




GOSTEI 0
Vanessa

Vanessa

11/11/2010

segue abaixo um exemplo de uso dessa tag:

<s:select name="country" list="countryList" listKey="countryId" listValue="countryName" headerKey="0" headerValue="Country" label="Select a country" />

Retirado justamente daquele link que te passei:
http://www.vaannila.com/struts-2/struts-2-example/struts-2-ui-tags-example-1.html

O que mais me impressiona era q antes aparecia normalmente ou não?

na Action te esse atributo cidade e seus respectivos getters and setters?.. a Tela pelo menos aparece e só dá erro depois? Ou nem renderiza para ser salvo o Dentista?

Att Davi




Pois é Davi eu tbm estou impressionada!!! Antes funcionava... listava as cidades e não gravava. Agora não funciona.   Já me baseei nesta pagina (vc ja tinha me passado ela antes) sei que o problema agora está na lista, pq coloquei assim:  
 
<td colspan="2"><s:select name="cidade" list="{'India','USA','UK'}" headerKey="" headerValue="Selecione" />


  e funcionou. mais quando coloco na opção List o nome da lista que tenho na action dá o erro.
GOSTEI 0
Davi Costa

Davi Costa

11/11/2010

Será que não é problema de sujeira no banco, lembra que antes vc tinha colocado sua entidade dentista como pacienta.
Talvez essas cidades ainda estejam referenciado paciente. tenta ver isso nem q tenha q apagar sua cidades e inserir dnovo.

att Davi
GOSTEI 0
Vanessa

Vanessa

11/11/2010

Será que não é problema de sujeira no banco, lembra que antes vc tinha colocado sua entidade dentista como pacienta.
Talvez essas cidades ainda estejam referenciado paciente. tenta ver isso nem q tenha q apagar sua cidades e inserir dnovo.

att Davi
Olhei tudo e o problema continua!!!
GOSTEI 0
Davi Costa

Davi Costa

11/11/2010

O problema está nessa busca das entidades cidade no banco,
tem que comparar bem o q está no banco e nas entidades java se tem algum reggistro q seria incompatível, por exemplo um campo notnull na entidade q no registro do banco esteja permitindo nulo e nulo no regsitro.
Qual seu banco? Posta aqui o script do banco da tabela dentista, paciente e cidade.
É muito importante que vc veja como debugar, é uma mão na roda e rapidinho vc vai identificar muitos problemas.
Se já tiver manjando de debugue, coloca um break point no método que captura as cidades no banco e também no get da sua lista na action.

Att Davi
GOSTEI 0
Vanessa

Vanessa

11/11/2010

Oi Davi,   ainda não consegui resolver este problema. E agora estou meio sem tempo. Gostaria de saber se vc tem algum exemplo da implementação do hibernate (muitos para um) com struts2 completa, ou seja, desde a parte de persistência até a DAO e a interface.   Acho que ajudaria muito. Acho que o problema é que  não estou sabendo fazer essa ligação corretamente.   Obrigada!!! 
GOSTEI 0
Davi Costa

Davi Costa

11/11/2010

Tenho sim. passo por email?

Att Davi
GOSTEI 0
Vanessa

Vanessa

11/11/2010

Tenho sim. passo por email?
    Muito obrigada!
GOSTEI 0
Vanessa

Vanessa

11/11/2010

Tenho sim. passo por email?
    Muito obrigada!
  Ah, sim por favor!!! vc tem acesso ao meu cadastro? Tem como pegar o e-mail?
GOSTEI 0
Davi Costa

Davi Costa

11/11/2010

Tenho sim, mas infelizmente só poderei enviar a noite, pois estou no trabalho e só tenho em casa..
Deixa eu te passar só mais uma alteração p vc testar. Coloca na sua página:

list="" // testa assim entre chaves p ver se corrige o erro.



Att Davi
GOSTEI 0
Vanessa

Vanessa

11/11/2010

Ok! hj eu tbm só poderei testar a noite, pq tbm estou no trabalho... na sexta feira estava de folga por isso conseguia fazer os testes na hora. Esse projeto que estou fazendo é para a faculdade e preciso entregá-lo pronto na sexta-feira dia (19/11), então te agradeço MUITO se vc puder me enviar este exemplo hj a noite. Estarei em casa a partir das 18:30 e lá tenho tudo disponível.  
GOSTEI 0
Davi Costa

Davi Costa

11/11/2010

Baixei um código aki de exemplo da própria javamagazine e adaptei para a sua necessidade.
Pois ele não tinha relacionamento ManyToOne. Eu fiz e coloquei a tag <s:select para funcionar ... realmente deu um pouco de trabalho. Mandei p seu email, mas sem os jars. Caso tenha algum problema de jar me avisa q depois te passo.

Att Davi
GOSTEI 0
Dyego Carmo

Dyego Carmo

11/11/2010

Opa !

Resolvido ?

GOSTEI 0
Vanessa

Vanessa

11/11/2010

Oi Diego,   desculpa a demora em responder.   recebi o seu e-mail ontem e tenho que confessar  que é muito mais do que o que eu entendo de struts e hibernate. Talves por isso eu não esteja conseguindo fazer. Acho que ele vai me ajudar bastante.   Muito obrigado!    
GOSTEI 0
Davi Costa

Davi Costa

11/11/2010

Vanessa,
identifica o action que cadastra livro, assim como sua página,.
vc vai perceber que pego o id do membro e busco no banco ese membro para inserir no livro.
E na página verifique tb como usei a tag <s:select/>. Acredito que seu foco deve ser aí.
Para resolver seu problema que é para sexta pode abstrair o resto. Depois vc olha o que é novidade para vc na calma.

Att Davi
GOSTEI 0
Davi Costa

Davi Costa

11/11/2010

E ai deu certo?

Att Davi
GOSTEI 0
Vanessa

Vanessa

11/11/2010

Oi Davi,   desculpa por nao estar respondendo!! eu ainda não consegui e acabei entregando sem resolver esta parte. Tenho novamente até dia 01/12 para resolver mais meu tempo tá meio escasso. Entao amanhã (que nao irei trabalhar) vou tentar.   Muito obrigada pela atenção!!
GOSTEI 0
Dyego Carmo

Dyego Carmo

11/11/2010

Em meu devspace existe a serie de video aulas "Aplicação completa utilizando hibernate" Voce pode pegar de lá varios exemplos funcionais

GOSTEI 0
POSTAR