2012-01-27 8 views
1

ユーザーがPhaselistenerを使用して特別なページにアクセスしないようにしようとしています。その理由から、私はどのページにアクセスしようとしているのか把握しようとしています。JSF PhaseListener viewIdは常に1の後ろにあります。

しかし、私の問題は、私は彼らが前にどこにページを取得することです。実際のページではありません。ここ

public void afterPhase(PhaseEvent event) 
{ 
    FacesContext fc = event.getFacesContext(); 
    System.out.println("test1" + fc.getViewRoot().getViewId()); 
} 

と同じ

public void afterPhase(PhaseEvent event) 
{ 
    FacesContext fc = event.getFacesContext(); 
    HttpServletRequest request = (HttpServletRequest) fc.getExternalContext().getRequest(); 
    String uri = request.getRequestURI(); 

    System.out.println("uri: " + uri); 
} 

理由です、そしてどのように私は、ユーザーがアクセスしようとしているページ名を得るのですか?彼らが一歩前に必要だったものではなく、彼らが来ているページを良くしています。

答えて

4

これは、HTTP POST要求の動作シーケンスが動作するため、1ステップ遅れです。コマンド・ボタンを使用してJSFアプリケーションをナビゲートすると、各リクエストはポスト・リクエストとして扱われます。ユーザーは、直接ブラウザのアドレスバーからURLを打つ

  • として使用すると、正確なビューIDを取得するよりも、

    あなたには、いくつかのリソースを保護しているので

    は、彼らがHTTP GETを介してアクセスされていることを確認し、これを達成することができます。
  • jsf appの投稿が単純なJSFナビゲーションの代わりにリソースにリダイレクトされた後。 POST-REDIRECT-GETパターンはこれに含まれ、外見はhereです。
  • POSTごとにいくつかのメッセージが表示されている場合は、JSF1.xの新機能であるFlashマップが必要な場合があります。必要に応じてFlashを実装できます。

HTTP GET要求のビューIDをキャッチすると結論づけます。

希望します。

+0

つまり、POSTによるページツーページナビゲーションはGETで実行しないでください。 http://stackoverflow.com/questions/4317684/when-should-i-use-houtputlink-instead-of-hcommandlinkも参照してください。 – BalusC

関連する問題