| Autor |
Mensagem |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 27/01/2011 09:16:09
|
f2pro
JavaTeenager
![[Avatar]](/images/avatar/846adc23d84a498c88bbfe33d4d9ca54.jpg)
Membro desde: 06/12/2010 08:17:32
Mensagens: 163
Offline
|
Pessoal, estou com um sério problema
estou usando o primefaces 2.1 com JSF 2.0
e, numa dataTable onde eu clico na linha, ele passa para um objeto contato_selecionado e depois, ao clicar em remover ocorre algo estranho.
suponhamos que tenha 3 contatos, selecione qualquer um deles sempre o primeiro é o excluido.. porém.. se eu der ou system.out.printLn(this.contato_selecionado.getNome()); por exemplo ele lista o nome do objeto que eu realmente selecionei...
segue abaixo o código..
contatos.xhtml
e o CadastroContatosMB.java
This message was edited 1 time. Last update was at 27/01/2011 15:02:31
|
F2PRO Soluções Inteligentes
www.f2pro.com.br |
|
|
 |
|
|
![[Post New]](/templates/default/images/icon_minipost_new.gif) 27/01/2011 10:49:34
|
brrodo
JavaTeenager
Membro desde: 07/02/2009 23:31:16
Mensagens: 173
Offline
|
Sua classe Contato implementa o método "equals" corretamente?
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 27/01/2011 11:12:42
|
f2pro
JavaTeenager
![[Avatar]](/images/avatar/846adc23d84a498c88bbfe33d4d9ca54.jpg)
Membro desde: 06/12/2010 08:17:32
Mensagens: 163
Offline
|
creio que sim cara... ele foi gerado automaticamente com o hibernate ...
This message was edited 1 time. Last update was at 27/01/2011 11:16:30
|
F2PRO Soluções Inteligentes
www.f2pro.com.br |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 27/01/2011 13:51:01
|
brrodo
JavaTeenager
Membro desde: 07/02/2009 23:31:16
Mensagens: 173
Offline
|
f2pro wrote:creio que sim cara...
ele foi gerado automaticamente com o hibernate ...
Me parece que o método "List.remove()" está usando o método "Object.equals()" para determinar a igualdade entre os objetos de Contato no momento da remoção, por isso o comportamento inesperado.
Você deve sobrescrever o método em Contato.
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 27/01/2011 14:49:05
|
f2pro
JavaTeenager
![[Avatar]](/images/avatar/846adc23d84a498c88bbfe33d4d9ca54.jpg)
Membro desde: 06/12/2010 08:17:32
Mensagens: 163
Offline
|
brrodo wrote:
f2pro wrote:creio que sim cara...
ele foi gerado automaticamente com o hibernate ...
Me parece que o método "List.remove()" está usando o método "Object.equals()" para determinar a igualdade entre os objetos de Contato no momento da remoção, por isso o comportamento inesperado.
Você deve sobrescrever o método em Contato.
segue abaixo o meu equals...
|
F2PRO Soluções Inteligentes
www.f2pro.com.br |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 27/01/2011 15:02:18
|
f2pro
JavaTeenager
![[Avatar]](/images/avatar/846adc23d84a498c88bbfe33d4d9ca54.jpg)
Membro desde: 06/12/2010 08:17:32
Mensagens: 163
Offline
|
Pessoal.. já resolvi
com as pistas que me deram.. eu criei outro equals... dai comparando campo a campo, nao todos até agora...
segue o codigo a baixo...
alguem sabe de outro modo mais efetivo? caso tenha vários campos..
abraços...
|
F2PRO Soluções Inteligentes
www.f2pro.com.br |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 27/01/2011 15:09:55
|
brrodo
JavaTeenager
Membro desde: 07/02/2009 23:31:16
Mensagens: 173
Offline
|
f2pro wrote:
brrodo wrote:
f2pro wrote:creio que sim cara...
ele foi gerado automaticamente com o hibernate ...
Me parece que o método "List.remove()" está usando o método "Object.equals()" para determinar a igualdade entre os objetos de Contato no momento da remoção, por isso o comportamento inesperado.
Você deve sobrescrever o método em Contato.
segue abaixo o meu equals...
Cheque se o atributo "codigo_contato" do "contato_selecionado" não está null.
Eu colocaria um breakpoint no método "equals" da classe Contato e debugaria para ver se o comportamento dele está adequado.
Esse problema não tem a ver com o JSF, tem a ver com o método "List.remove" q não consegue identificar qual objeto da lista é igual ao objeto "contato_selecionado" q é passado como parâmetro para removê-lo.
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 27/01/2011 15:24:24
|
brrodo
JavaTeenager
Membro desde: 07/02/2009 23:31:16
Mensagens: 173
Offline
|
f2pro wrote:Pessoal.. já resolvi
com as pistas que me deram.. eu criei outro equals... dai comparando campo a campo, nao todos até agora...
segue o codigo a baixo...
alguem sabe de outro modo mais efetivo? caso tenha vários campos..
abraços...
Pra definir a igualdade, vc precisa sobrescrever tanto o método "hashcode()" quanto "equals()" da classe Object.
Geralmente se vc gerou o hashcode utilizando apenas o atributo "id" da classe, vc implementa o "equals" utilizando apenas esse mesmo atributo. Ou seja, utilize os mesmos atributos pra definir tanto o hashcode qt a igualdade pelo método "equals".
Eu colocaria o atributo "codigo_contato" como "int" e usaria uma implementaçaõ mais simples:
|
|
|
 |
|
|