rbroz85
Dezembro 11, 2008, 1:14pm
#1
Boa tarde senhores.
estou com um problemao!
em uma aplicação web usando JPA e JSF
tenho uma pagina com uma listagem em um datatable com varios items no qual eu posso modificar seus valores
mas esses valores estao em uma tabela diferente… pois é um relacionamento 1 para N
pois 1 item pode ter varios valores.
mas na listagem eu apresento um de cada vez… (por estado)
problema:
quando eu coloca os valores nos item e salvo… eu persisto os valores… e minha listagem e retornada com o id dos valores para cada item…
se eu voltar a pagina… os item vao vir com a listagem se os valores digitados… e se eu salvar dinovo… vai duplicar no banco !
como eu resolvo isso ?
mt obrigado!
Alberes
Dezembro 11, 2008, 1:48pm
#2
Cria uma váriável de controle. Por exemplo: pega a data e hora do servidor e guarda um na sessão e coloca no campo oculta da página e antes de salvar verificar se os valores são iguais e depois que salvar atualizar a variável de controle na sessão.
rbroz85
Dezembro 11, 2008, 2:15pm
#3
um… essa minha listagem esta em um Bean de sessao já
mas esse lance de data nao vai dar certo…
eu vou entrar na pagina para inserir dados… vai ativar a variavel de data para 20081211 as 15 e 40 minutos…
vou ficar na listagem sem fazer alteração durante uns 3 minutos… quando eu for salvar… eu comparar… via dar diferente ! 20081211 as 15 e 43 minutos…
e mesmo se eu controlar pela variavel…se eu voltar no back do browser ele vai pegar minha lista antiga da sessao
queria alguma forma pra nao ter cache no navegador… pra quando eu voltar a pagina… seila… nao deixar… ou atualizar dinovo…
tente limpar todos os atributos, listas etc ao sair da página que recebe os dados… limpar msm… no braço! kkk
public void limpar(){
objeto = null;
lista.clear();
}
abraço;
rbroz85
Dezembro 11, 2008, 2:43pm
#5
mas eu nao tenho a informação se o usuario clicou em Back no navegador dele!
se eu soubesse que ele clicou la… eu daria um refresh em tudo pra todos os dados ficarem atuais
sacou ?
obrigado
é… ae eu n sei mais. foi mal. espero que algn consiga t ajudar.
abraço;
Cara o back do browser é um problema.
Acho que você deveria garantir que as informações não serão persististas no banco novamente fazendo uma checagem que verifique se o dado a ser inserido já está gravado. (Algo neste sentido, fazendo um Listener sabe?)
Procure por PRG (Post-Redirect-Get)
http://www.theserverside.com/tt/articles/article.tss?l=RedirectAfterPost
http://learnjsf.com/wp/2006/08/06/a-prg-phase-listener-for-jsf
http://balusc.blogspot.com/2007/03/post-redirect-get-pattern.html
http://www.theserverside.com/patterns/thread.tss?thread_id=20936#92866
Espero ter ajudado.
Desative o cache do browser, aí a página é recarregada:
response.setDateHeader("Expires", 0);
response.setHeader("Pragma", "noCache");
response.setHeader("Cache-Control","no-cache");