2010-04-13 56 views
0

我使用JSP開發了一個簡單的Web應用程序。它有一個包含用戶名,密碼字段和sumbit按鈕的登錄頁面。它有一個註銷頁面,其中包含到登錄頁面的鏈接。而且有像第1頁,第二頁,第三頁,第四頁,等如何更改導航工具欄中的後退按鈕功能?

正常工作流程的某些頁面如下:

  • 登錄後談到第1頁。
  • 然後點擊一些動作,它會轉到第2頁。
  • 然後點擊一些動作,它會轉到第3頁。
  • 然後點擊一些動作,它會轉到第4頁。所以現在我在第4頁。
  • 現在點擊瀏覽器導航工具欄中的返回按鈕,一般會轉到上一頁(第3頁)。

但我的要求是,如果您從應用程序中的任何頁面點擊導航工具欄中的按鈕,那麼您應該去註銷頁面。例如:如果你在頁面4並按下後退按鈕,那麼你應該去註銷頁面而不是頁面3。

如何實現這一目標?這是否可能?也許用Javascript?


如何跟蹤和控制導航工具欄中的瀏覽器後退按鈕功能?

但我原來的規定:

我一直在使用JSF框架開發保護的應用程序。

,也是我使用範圍(會話範圍)

在我的應用程序使用下面的代碼...但是不行吧...

public class **LogoutPhaseListener** implements **PhaseListener** 
{ 

public void **afterPhase**(PhaseEvent event) 
{ 
} 


public void **beforePhase**(PhaseEvent event) 
{ 

     FacesContext facesContext = event.getFacesContext(); 
     HttpServletResponse httpServletResponse = (HttpServletResponse) facesContext.getExternalContext().getResponse(); 
     httpServletResponse.addHeader("Pragma", "no-cache"); 
     httpServletResponse.addHeader("Cache-Control", "no-cache"); 
     httpServletResponse.addHeader("Cache-Control", "must-revalidate"); 
     httpServletResponse.addHeader("Expires", "Mon, 8 Aug 2006 10:00:00 GMT"); 
     httpServletResponse.addHeader("Cache-Control", "no-store"); 
} 


public PhaseId **getPhaseId**() 
{ 

     return PhaseId.RENDER_RESPONSE; 
} 

} 

如果單擊後退按鈕瀏覽器,然後返回上一頁...

,但我想去註銷page..when我在瀏覽器中單擊後退按鈕...上面的代碼完美地工作吧..

回答

1

理論上,如果您在會話範圍內維護一個令牌,該令牌指示當前步驟,並且您通過相應地設置response headers來禁用客戶端緩存。如果您使用POST,則還需要實施PRG (post-redirect-get)模式以避免客戶端發生「頁面過期」錯誤。

登錄後,在進入page1之前,在會話中存儲1。在提交page1之後和進入page2之前,在會話中存儲2。等等。每次請求頁面時,都會檢查請求哪個頁面,並且頁面編號是否等於會話中的編號,如果不是,則重定向到註銷頁面。

如果您禁用客戶端緩存並實施PRG,則客戶端將保證激發實際 GET請求,而不是從瀏覽器緩存請求頁面。

+0

這是真的嗎?我相信Opera在這方面有一些時髦的行爲。請參閱http://dev.opera.com/forums/topic/224464 – MSalters 2010-04-13 12:30:12

相關問題