2015-05-18 5 views
2

Spring Webflow не позволяет пользователю вернуться к началу потока после завершения потока, и пользователь переходит в конечное состояние. Нажатие кнопки «Назад» браузера приведет его к странице с ошибкой, а не к началу потока. Сообщите мне, могу ли я предоставить дополнительную информацию.Spring Webflow не позволяет пользователю вернуться к началу потока после завершения потока

ответ

2

При повторном входе потока после того, как пользователь нажимает кнопку «Назад», вам нужно проверить состояние какого-либо типа или вызвать исключение, где либо можно поймать и обработать, чтобы перенаправить на нужную страницу.

Возможные решения:

1. Добавить в пользовательской сессии переменная, которая указывает на конкретный поток больше не может быть введен пользователем и проверить эту переменную в начале потока.

 <decision-state id="checkBackButtonClick"> 
     <if test="externalContext.sessionMap.preventBackButtonClick" then="redirectToHomePage" else="continueToEditState"/> 
     </decision-state> 

.... 

     <end-state id="end" view="externalRedirect:/pojos/#{somePojo.id}"> 
      <on-entry> 
       <set name="externalContext.sessionMap.preventBackButtonClick" value="true" type="java.lang.Boolean"/> 

      </on-entry> 
     </end-state> 

Хотя решение выше, как представляется, «взломать» Я думаю, что это хорошее решение, если вам нужно только это поведение для 1 или нескольких потоков, и это не требует много для реализации ... (без расширяющихся классов, переопределяющих методов и т. д.)

2. Еще одно возможное решение - поместить атрибут/требование 'require = true' для входного параметра для потока.

<input name="id" required="true"/> 

Таким образом, если пользователь нажмет кнопку назад без необходимых паров в URL поток вызовет исключение

org.springframework.webflow.engine.FlowInputMappingException: 

И в зависимости от того, как обрабатывать исключения в ваших webflows ... вы можете поймать это исключение и перенаправление на нужную страницу/поток. Предполагает, что у вас есть параметры ввода «input».

3. Внесите свой поток, расширив AbstractFlowHandler в java, который даст вам огромное количество возможностей настройки. Очевидно, что третий вариант включает в себя больше кодирования/работы. Используйте его в качестве последнего средства

http://www.springbyexample.org/examples/simple-spring-web-flow-webapp-code-example.html

ftp://courses.rvrjcce.ac.in/Java%20Sessions/Software/spring-webflow-2.1.1.RELEASE/docs/spring-webflow-reference/html/ch11s04.html

http://www.jonathanhui.com/spring-web-flow-flow-programming

+0

история = опция «Invalidate», кажется, только на переходный тег под «вид государства». В моем случае я перехожу от -> ->. Как только я в конечном состоянии, я не хочу, чтобы обратный браузер нажал, чтобы вернуть меня к началу потока. – user1187958

+0

@ user1187958 Хмм, я не сделал этого некоторое время. Я думаю, что то, что вы хотите сделать, это вызвать исключение при каждом нажатии кнопки «назад», а затем обработать исключение, чтобы перенаправить на желаемую страницу ... или, возможно, выполнить проверку проверки каждый раз, когда начинается поток (и если параметры отсутствуют) и вызвать перенаправление там. Я собираюсь экспериментировать в этом направлении и посмотреть, что я придумал – Selwyn

+0

@ user1187958 Я обновил ответ своим исследованием. Я не мог найти ничего встроенного, но в зависимости от вашего варианта использования решения, описанные выше, будут простыми в реализации. – Selwyn