Проблема веб-потока Grails с кнопкой возврата браузера

StackOverflow https://stackoverflow.com/questions/2022022

  •  19-09-2019
  •  | 
  •  

Вопрос

У меня возникли проблемы с корректной работой кнопки возврата браузера в веб-потоке.Версия grails - 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 web flow изменить параметр выполнения, даже если я перенаправлен в то же состояние?Или я могу поместить свой собственный параметр в URL-адрес?

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

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

Том

Это было полезно?

Решение

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

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-адреса с текущим состоянием объекта потока.Таким образом, после нескольких нажатий кнопки "Назад" можно легко определить текущего участника, которого вы обрабатываете.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top