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

Foi útil?

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top