Grails problema de fluxo de web com botão voltar do navegador
-
19-09-2019 - |
Pergunta
Estou tendo problemas para chegar ao trabalho no botão voltar do navegador corretamente no fluxo de web. Versão do Grails é 1.1.2. Imagine o exemplo de código:
def someFlow = {
...
fillGroup {
on("addMember"){
...
}.to "fillMember"
}
fillMember {
on("addMember") {
...
}.to "fillMember"
on("goToCart").to "showCart"
}
showCart {
...
}
}
Agora, acrescento grupo, várias (> 1) os membros e ir para o cesto. Problema é que durante o enchimento os membros da URL permanece a mesma. parâmetro execução URL muda apenas se o estado (vista) muda.
Assim Firefox lembra páginas fillMember como uma página porque o URL não muda. Portanto botão voltar não funciona corretamente. Se eu estou em showCart e empurrar para trás, eu começo a fillMember página. Além disso apertar de botão voltar retorna fillGroup. Eu preciso dele para passar por todas as páginas fillMember.
Existe alguma maneira de forçar o fluxo de web Grails para alterar o parâmetro de execução mesmo que eu redirecionado para o mesmo estado? Ou eu posso colocar meu próprio parâmetro para o URL?
Eu encontrei uma maneira muito feio como fazer isso: usar dois estados fillMember - fillMember1 e fillMember2, ambos fazendo a mesma coisa, um redirecionamento para outro. Mas eu preciso de mais um estado de ação para ser capaz de distinguir o estado real quando bater para trás e botões de avançar. Esta construção obras, mas eu prefiro a maneira mais fácil.
Obrigado por todas as respostas
Tom
Solução
Até agora, a única solução que eu encontrei é a que referi. Use dois estados vista, tanto fazendo exatamente a mesma coisa, e um estado de ação para manter algumas informações do estado (que seria difícil distinguir adequadamente membro processado sem ele). O código seria algo parecido com isto:
def someFlow = {
...
fillGroup {
on("addMember"){
...
}.to "fillMemberLogic"
}
fillMemberLogic {
action {
...
flow.stateinf += 1
if(flow.stateinf%2 == 1)
return gotoFillMember1()
else
return gotoFillMember2()
}
on("gotoFillMember1").to "fillMember1"
on("gotoFillMember2").to "fillMember2"
}
fillMember1 {
on("addMember") {
...
}.to "fillMemberLogic"
on("goToCart").to "showCart"
}
fillMember2 {
on("addMember") {
...
}.to "fillMemberLogic"
on("goToCart").to "showCart"
}
showCart {
...
}
}
Uma vez que a visão está sendo alterado para cada membro, o parâmetro de execução também está sendo alterado e URL é distinta para cada membro. Firefox distingue visto páginas de acordo com a URL, para que possa ir e voltar através de todos os membros que utilizam para trás e botões de avançar.
fluxo Web é URL de mapeamento com o estado atual do objeto de fluxo. Portanto, é facilmente possível distinguir o membro atual que você está processando depois de vários empurrões botão de volta.