2013-10-14 24 views
0

我有一個按鈕,可以將我切換到廣告的詳細信息。但要查看廣告用戶需要記錄的詳細信息。所以在pages.xml我定義重定向到登錄頁面:如何重定向到切換到login-required = true之前呼叫的頁面

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

我不知道如何將用戶重定向到登錄後的廣告信息?

當用戶未登錄時,他將從「.../app/advert/3」切換到「.../app/user」。我不知道如何將用戶重定向到廣告的詳細信息。我正在丟失關於廣告ID的信息。 我試圖在pages.xml定義PARAM:

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

但advertId未設置。任何想法?

+0

感謝您的迴應。我添加了事件偵聽器到components.xml。但我也在pages.xml中定義了從登錄到用戶視圖的重定向: <重定向視圖-id =「/ user.xhtml」/> user1545274

+0

我想知道這是否會導致問題?但是如果用戶選擇登錄選項,我需要重定向到用戶帳戶。 – user1545274

回答

0

pages.xml文件中刪除<rule if="#{!identity.loggedIn}">。你需要做的僅僅是標記廣告頁面爲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。您定義的事件偵聽器攔截此事件並保存當前視圖和參數。

當驗證成功完成時,Seam發出org.jboss.seam.security.loginSuccessful,通過重定向到以前保存的視圖中再次截獲並處理。如果沒有保存視圖(即用戶直接進入登錄頁面並且因此沒有觸發事件),則發生登錄操作的正常導航規則(用戶被帶到/user.xhtml

或者,您需要手動在您的導航規則中發出notLoggedIn事件,但請記住,僅對導航規則進行評估AFTER發生操作,因此您需要在頁面描述符中添加<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)}" />...