2013-10-14 6 views
0

У меня есть кнопка, которая переключает меня на детали объявления. Но для того, чтобы просмотреть информацию о пользователе, пользователь должен быть зарегистрирован. Таким образом, в pages.xml я определил перенаправление на страницу входа в систему:Как перенаправить на страницу, вызывается до перехода на login-required = true

<rule if="#{!identity.loggedIn}"> 
    <redirect view-id="/login.xhtml" /> 
</rule> 

Я не знаю, как перенаправить пользователя на детали объявление после входа в систему?

Когда пользователь не зарегистрирован, он будет переключен с «.../app/advert/3» на «.../app/user». И я не знаю, как перенаправить пользователя на детали объявления. Я теряю информацию об идентификаторе объявления. я пытался определить в pages.xml параметров:

<page login-required="false" view-id="/advert/*"> 
    <rewrite pattern="/advert/{advertId}" /> 
    <param name="advertId" value="#{contextUser.setadvertId(advertId)}" />... 

но advertId не установлен. Есть идеи?

+0

Спасибо за ваш ответ. Я добавил слушателей событий к компонентам.xml. Но я также определил перенаправление в pages.xml от имени пользователя к пользователю: <просмотр переадресации -id = "/ user.xhtml" /> user1545274

+0

И мне интересно, может ли это вызвать проблему? Но мне нужно перенаправить на учетную запись пользователя, если пользователь выбирает вариант входа. – user1545274

ответ

0

Удалите <rule if="#{!identity.loggedIn}"> из файла pages.xml. Что вам нужно сделать, это просто пометить объявления страницы как login-required="true" вместо:

<page login-required="true" view-id="/advert/*"> 
    <rewrite pattern="/advert/{advertId}" /> 
    <param name="advertId" value="#{contextUser.setadvertId(advertId)}" />... 

Когда страница помечаются как login-required="true" и доступ неаутентифицированными, Seam автоматически эмитирует org.jboss.seam.security.notLoggedIn события и перенаправляет к просмотру, определенному в login-view-id. Выбранный вами прослушиватель событий перехватывает это событие и сохраняет текущий вид и параметры.

Когда аутентификация завершена успешно, шов испускает org.jboss.seam.security.loginSuccessful, который снова перехватывается и обрабатывается путем перенаправления на ранее сохраненный вид. Если вид не сохраняется (т. Е. Пользователь перешел непосредственно на страницу входа и, таким образом, не было запущено событие notLoggedIn), тогда будет выполнено обычное навигационное правило для действия входа в систему (пользователь берется на /user.xhtml.

В качестве альтернативы, вам необходимо исправить событие notLoggedIn вручную в вашем навигационном правиле, но имейте в виду, что правила навигации оцениваются только ПОСЛЕ происходит действие, поэтому вам нужно добавить элемент <action/> в дескриптор страницы, чтобы вызвать проверку правила, поэтому что-то вроде этого:

<page login-required="false" view-id="/advert/*"> 
    <action execute="#{...}" /> <!-- execute any action to trigger rule evaluation --> 
    <navigation> 
    <rule if="#{not identity.loggedIn}"> 
     <!-- raise the event to trigger the capture of the current view --> 
     <raise-event type="org.jboss.seam.security.notLoggedIn" /> 
     <redirect view-id="/login.xhtml" /> 
    </rule> 
    </navigation> 
    <rewrite pattern="/advert/{advertId}" /> 
    <param name="advertId" value="#{contextUser.setadvertId(advertId)}" />... 

 Смежные вопросы

  • Нет связанных вопросов^_^