2012-03-15 1 views
1

私は、アプリケーションのすべてのメッセージが常にユーザーに表示されるような種類のログ表示をユーザーに実装することを考えていました。すべてのFacesMessagesを異なるリクエストで保存する方法

私はJSF 1.2とRF 3.3.3を使用しているので、すべてのメッセージをさまざまなリクエストで追加して保存することができるかどうかを知りたかったので、ユーザーは彼が行った操作の履歴を知ることができます。サポートチームが問題の原因を分析するのにも役立ちます。また、シミュレートする必要がある場合や目的をデバッグする必要がある場合は、開発者にメッセージを送信することもできます。私の質問はどこにある

私もfacesMessagesのは、異なる要求を介してクリアされ知っているが、異なる要求を介してメッセージを保存するために、厥:)

は、それらを保存することにより、異なる方法で処理することでしたセッション変数またはそうです...すべての可能な回答をお待ちしております。

答えて

2

PhaseListenerでレンダリング応答中にすべてのメッセージを収集することができます。例えば。 、それは実行するために得る次のようにfaces-config.xmlでそれを登録するには

public class MessagesListener implements PhaseListener { 

    @Override 
    public PhaseId getPhaseId() { 
     return PhaseId.RENDER_RESPONSE; 
    } 

    @Override 
    public void beforePhase(PhaseEvent event) { 
     FacesContext context = event.getFacesContext(); 
     Iterator<String> clientIds = context.getClientIdsWithMessages(); 

     while (clientIds.hasNext()) { 
      String clientId = clientIds.next(); 
      Iterator<FacesMessage> messages = context.getMessages(clientId); 

      while (messages.hasNext()) { 
       FacesMessage message = messages.next(); 
       save(clientId, message); // Do your job here. 
      } 
     } 
    } 

    @Override 
    public void afterPhase(PhaseEvent event) { 
     // NOOP. 
    } 

} 

<lifecycle> 
    <phase-listener>com.example.MessagesListener</phase-listener> 
</lifecycle> 
+0

の提案に感謝多くのことを、それが動作し、この提案を実装し、テストするために長い時間を割いて申し訳ありません。) – Satya

関連する問題