Проблема веб-потока Grails с кнопкой «Назад» браузера - PullRequest
0 голосов
/ 07 января 2010

У меня проблемы с правильной работой кнопки браузера в веб-потоке. Версия грааля 1.1.2. Представьте пример кода:

def someFlow = {
   ...
   fillGroup {
      on("addMember"){
         ...
      }.to "fillMember"
   }
   fillMember {
      on("addMember") {
         ...
      }.to "fillMember"
      on("goToCart").to "showCart"
   }
   showCart {
      ...
   }
}

Теперь я добавляю группу, несколько (> 1) участников и иду в корзину. Проблема в том, что при заполнении членов URL остается прежним. Параметр выполнения URL изменяется только при изменении состояния (представления).

Таким образом, Firefox запоминает страницы fillMember как одну страницу, поскольку URL-адрес не изменяется. Поэтому кнопка «Назад» не работает должным образом. Если я нахожусь на showCart и возвращаюсь, я получаю страницу fillMember. Дальнейшее нажатие кнопки назад возвращает fillGroup. Мне нужно, чтобы он прошел через все страницы fillMember.

Есть ли способ заставить веб-поток Grails изменить параметр выполнения, даже если я перенаправлен в то же состояние? Или я могу добавить свой собственный параметр в URL?

Я нашел один довольно уродливый способ сделать это: использовать два состояния fillMember - fillMember1 и fillMember2, оба выполняющих одно и то же, одно перенаправляет на другое. Но мне нужно еще одно состояние действия, чтобы можно было различить фактическое состояние при нажатии кнопок «назад» и «вперед». Эта конструкция работает, но я бы предпочел более простой способ.

Спасибо за любые ответы

Tom

1 Ответ

2 голосов
/ 08 января 2010

Пока единственное решение, которое я нашел, - это упомянутое мной. Используйте два состояния просмотра, оба выполняющих одно и то же, и одно состояние действия для хранения некоторой информации о состоянии (было бы трудно правильно отличить обработанный элемент без него). Код будет примерно таким:

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 {
      ...
   }
}

Поскольку представление изменяется для каждого члена, параметр выполнения также изменяется, и URL-адрес различен для каждого члена. Firefox различает просмотренные страницы по URL, поэтому вы можете перемещаться между всеми участниками, используя кнопки «назад» и «вперед».

Веб-поток отображает URL-адрес с текущим состоянием объекта потока. Поэтому можно легко отличить текущий элемент, который вы обрабатываете после нескольких нажатий кнопки «назад».

...