2012-03-15 41 views
1

我只是想知道爲用戶實現一種日誌顯示,其中應用程序中的所有消息始終顯示給用戶。如何通過不同請求保存所有FacesMessages

由於我使用JSF 1.2和RF 3.3.3,想知道是否可以保存所有消息,並通過不同的請求添加並顯示給用戶,以便用戶知道他已完成的操作的歷史記錄。對於支持團隊來說,分析問題的原因也很有用,如果需要模擬或調試目的,他可以將消息發送給開發人員。

我也知道facesmessages得到了不同的請求被清除,多數民衆贊成在我的問題在於,保存的消息在不同的請求:)

能以不同的方式將其儲存處理的會話變量左右...我將非常感謝所有可能的答案

回答

2

您可以在回報過程中收集所有消息PhaseListener。例如。

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. 
    } 

} 

讓它運行,如faces-config.xml如下注冊它:

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

非常感謝您的建議和它的作品,併爲需要長時間來實現並測試這個建議很抱歉;) – Satya 2012-04-10 04:29:00