[RESOLVIDO] (JSF + AJAX + Primefaces) Opinião sobre contornar problemas de Usabilidade

Aew…

galera… eu tenho uma regra de negócio um pouco complexa que esta em produção.

Eu tenho uma List<> de uma entidade Pessoa. Do lado direito da tela eu tenho um panelGrid com ui-repeat que mostra os dados das Pessoas da Lista.
Ok… Do lado esquerdo eu tenho uma série de campos… por exemplo:
Nome
Idade
Cidade
Pai
Mãe

O que acontece: quando um campo perde o foco, rola um ajax que atualiza a lista e da um update no painel da direita.
Beleza!! Esta funcionando.

Só que, eu tenho um botão “Salvar”, pois se a pessoa que o cara ta digitando, não aparecer no radar, então ela pode inserir uma pessoa nova.

Também funciona legal. O problema é o seguinte:

1 ) Digitei o nome
2 ) Dei TAB
3 ) Campo novo perdeu o foco
4 ) A lista é atualizada
5 ) O campo Idade ganha o foco
6 ) Clico em Salvar
7 ) O campo Idade Perde o Foco
8 ) A lista é atualizada
9 ) FIM !

Ou seja, precisa clicar de novo no botão salvar para executar o form!!!

Estive pensando em usar o evento keyup… porém a tabela tem milhoes de registros e demora de 2 ~ 5 segundos para executar o ajax…
Imagina fazer isso toda vez que uma letra é digitada??

Inviável!!

Alguma sugestão?
Herbert ? (hahaha)

Interessante o problema.

A regra de busca, no caso o identificador da sua busca, poderia ser um campo obrigatório de preenchimento, vaja: Efetuar a busca toda vez que realizar um evento de foco pode lhe trazer muitos problemas, pois mesmo antes do usuário terminar de digitar o campo, a busca não foi concluída. Como você disse leva até 5 seg. para executar isso.

Vamos aos pontos:

Pode trabalhar com o cache dessa informação (Lista), o que lhe traria grandes benefícios.

Executar a busca toda vez, pode não ser interessante, veja, ao invés de efetuar a busca com 1 letra, defina um número minimo de caracteres, 3 por exemplo, que lhe traz um agrupamento menor de resultados, ganhando em performance e velocidade na busca dos seus dados, assim uma busca já pode trazer o resultado esperado, ou não, ao invés de ter que realizar 3 para obter o mesmo valor. Entende?

O que me é estranho é você ter que clicar em salvar duas vezes, provavelmente, algum erro besta esta causando isso. Faça um debug do tráfego da informação, e veja se ele é persistida, pode estar apenas repetindo a ação para obter o resultado, não sei. Precisa ver melhor essa parte pois para mim ficou um pouco confusa ainda.

[quote=edu_fernandes]Interessante o problema.

A regra de busca, no caso o identificador da sua busca, poderia ser um campo obrigatório de preenchimento, vaja: Efetuar a busca toda vez que realizar um evento de foco pode lhe trazer muitos problemas, pois mesmo antes do usuário terminar de digitar o campo, a busca não foi concluída. Como você disse leva até 5 seg. para executar isso.

Vamos aos pontos:

Pode trabalhar com o cache dessa informação (Lista), o que lhe traria grandes benefícios.

Executar a busca toda vez, pode não ser interessante, veja, ao invés de efetuar a busca com 1 letra, defina um número minimo de caracteres, 3 por exemplo, que lhe traz um agrupamento menor de resultados, ganhando em performance e velocidade na busca dos seus dados, assim uma busca já pode trazer o resultado esperado, ou não, ao invés de ter que realizar 3 para obter o mesmo valor. Entende?

O que me é estranho é você ter que clicar em salvar duas vezes, provavelmente, algum erro besta esta causando isso. Faça um debug do tráfego da informação, e veja se ele é persistida, pode estar apenas repetindo a ação para obter o resultado, não sei. Precisa ver melhor essa parte pois para mim ficou um pouco confusa ainda.[/quote]

Valeu pela resposta…
Cara não é erro…

O que acontece é que quando ele clica pela primeira vez, o campo perde o foco… Então atualiza a busca!
É como se ele tivesse clicado em qqer parte da tela, fazendo o campo perder o foco.

Realmente, uma solução seria um keyup com um delay de tempo né ?
legal isso

Entendi o problema agora! Era o que tinha imaginado, mas achei que estava enganado. rss

O que vc pode fazer é o seguinte:

O evento de busca ocorre com a perda de foco do campo, mas o salvar ativa isso, ou qualquer outra ação, que jogue o cursos para fora do input. Para adequar isso, acredito que vai lhe gerar muitos problemas, pois não vai ser fácil, mas vai ser interessante programar isto. O evento de foco pode ser mais interessante para a busca, mas pode adequar a sua regra de negócio, por exemplo, ao receber o foco um campo busca o anterior na base. Mas não sei o quanto isto agrega, tem que se pensar melhor na solução.

Outro ponto é, como disse, realizar a busca por tempo, como você citou, ou por número de caracteres. Mas não toda vez. Essas requisições AJAX podem vir a ser mais problemáticas do que gostaria.

Acredito que este seja o caminho a ser seguido.

Espero ter ajudado com a resposta.

Problema é fazer isso com Primefaces =/

Se é um problema, tem solução!

Tenho ctz que vai conseguir!

Me mantenha informado do caminhar da atividade, se possível, gostaria de saber o que decidiu fazer.

Abraço e boa sorte com o projeto!

Pq não verifica se o campo idade está preenchido e não deixa atualizar a lista?

[quote=edu_fernandes]Se é um problema, tem solução!

Tenho ctz que vai conseguir!

Me mantenha informado do caminhar da atividade, se possível, gostaria de saber o que decidiu fazer.

Abraço e boa sorte com o projeto![/quote]

Resolvi com Javascript e Remote command!

Não disse que conseguiria? rss

Parabéns!

[quote=edu_fernandes]Não disse que conseguiria? rss

Parabéns![/quote]

valeu cara!
abraçosssss!

Opa cara, agora que vi sua resposta.
desculpa nao ter respondido antes…

o que eu dei foi só um exemplo.
Na verdade os campos são dinâmicos!

mas já foi resolvido com a ajuda do nosso amigo
edu_fernandes!

abraços