Как узнать, откуда был вызван переход

24 views
Skip to first unread message

Kirill Suhanov

unread,
Oct 1, 2010, 7:37:16 AM10/1/10
to Сообщество ruGrails
Доброго все времени дня.
У меня небольшой вопрос. Задача заключается в следующем: есть контроллер, внутри экшн, и соответственно вьюшка. В этой вьюшке выводится всплывающее окно при определенных условиях. Так вот, хотелось бы сделать так, что если пользователь перемещается в пределах этой вьюшки(ну например совершает действие внутри этой вьюшки, которое перекидывает его снова в себя), это всплывающее окно не появлялось. А если из любого другого места(другой вьюшки, другого контроллера и т.д.), то окно появляется. Т.е. задача сводится к тому, чтобы в экшне проверять, откуда пришел пользователь: из этого же экшна, или откуда-то из другого места. Интересует вопрос, есть ли в грэйлсе встроенные средства для этого?
У меня появились следующие идеи: сделать фильтр, распространяющийся на все, который берет имя контроллера и экшна и добавляет их во flash, соответственно в любом экшне можно будет получить из флэша инфу, откуда он был вызван. Но фильтр на все - это дополнительная нагрузка. Может быть разработчики уже продумали этот момент...
Была идея и по referer'у получать из http заголовков. Но тут много лишнего: нужно будет определять action, и если используется url mapping, то тоже проблемы.

Yuriy Yarovoy

unread,
Oct 1, 2010, 8:24:51 AM10/1/10
to rugr...@googlegroups.com
Насколько я понимаю, вам нужно организовать что-то вроде пошагового мастера (wizards)? В таком случае рекомендую ознакомиться с поддержкой webflows в Grails.
--
Best regards,
Yuriy Yarovoy.

Kirill Suhanov

unread,
Oct 1, 2010, 8:26:44 AM10/1/10
to rugr...@googlegroups.com
Нет, пошаговый мастер не нужен. Нужно просто при входе в action проверить, пришел ли пользователь из этого же action'а, или из какого-то другого.

1 октября 2010 г. 16:24 пользователь Yuriy Yarovoy <yuriy....@gmail.com> написал:

--
Вы получили это сообщение, поскольку подписаны на группу ruGrails.
Чтобы добавлять сообщения в эту группу, отправьте письмо по адресу rugr...@googlegroups.com.
Чтобы отменить подписку на эту группу, отправьте сообщение по адресу rugrails+u...@googlegroups.com.
О дополнительных функциях можно узнать в группе по адресу http://groups.google.com/group/rugrails?hl=ru.

Дмитрий Дементьев

unread,
Oct 1, 2010, 8:30:42 AM10/1/10
to rugr...@googlegroups.com
а если просто завести флаг в экшне и проверять его?

1 октября 2010 г. 15:26 пользователь Kirill Suhanov <suhanov...@gmail.com> написал:

Kirill Suhanov

unread,
Oct 1, 2010, 9:03:42 AM10/1/10
to rugr...@googlegroups.com
Не совсем понял, можно поподробнее? Небольшой примерчик может быть...

1 октября 2010 г. 16:30 пользователь Дмитрий Дементьев <demen...@gmail.com> написал:

Дмитрий Дементьев

unread,
Oct 1, 2010, 9:14:11 AM10/1/10
to rugr...@googlegroups.com
в экше в реквест писать параметр. Во вью проверять. if мой_паметр == null - выводить окно.

1 октября 2010 г. 16:03 пользователь Kirill Suhanov <suhanov...@gmail.com> написал:

Kirill Suhanov

unread,
Oct 1, 2010, 10:12:01 AM10/1/10
to rugr...@googlegroups.com
Да, было бы логично. Но сейчас понял, что мне нужно не отображать это окно при переходе из текущего контроллера, из любого действия. То есть если контроллер, вызвавший переход = моему контроллеру, то не отображать. Иначе - отображать.

И кстати, появился еще вопрос про forward. Просто взяли в доработку уже готовый проект на грэйлс. Я сам до этого про forward не слышал, и пользовался только redirect. Чем они  существенно отличаются? И когда нужно использовать первое, а когда второе?

1 октября 2010 г. 17:14 пользователь Дмитрий Дементьев <demen...@gmail.com> написал:

Дмитрий Дементьев

unread,
Oct 1, 2010, 10:17:27 AM10/1/10
to rugr...@googlegroups.com
http://www.realcoding.net/article/view/2182 4й пункт:)

1 октября 2010 г. 17:12 пользователь Kirill Suhanov <suhanov...@gmail.com> написал:

Kirill Suhanov

unread,
Oct 1, 2010, 10:20:27 AM10/1/10
to rugr...@googlegroups.com
Спасибо большое:)

1 октября 2010 г. 18:17 пользователь Дмитрий Дементьев <demen...@gmail.com> написал:
Reply all
Reply to author
Forward
0 new messages