【问题标题】:How to save all FacesMessages over different requests如何通过不同的请求保存所有 FacesMessage
【发布时间】:2012-03-15 12:35:56
【问题描述】:

我只是想为用户实现一种日志显示,其中应用程序中的所有消息一直显示给用户。

由于我使用 JSF 1.2 和 RF 3.3.3,想知道是否可以保存所有由不同请求添加的消息并将它们显示给用户,以便用户知道他所做的操作的历史记录。支持团队分析问题的原因也很有用,如果需要模拟或调试目的,他可以将消息发送给开发人员。

我也知道 facemessages 会因不同的请求而被清除,这就是我的问题所在,以保存不同请求的消息 :)

可以通过保存它们以不同的方式处理它们是一个会话变量等等......我将不胜感激所有可能的答案

【问题讨论】:

    标签: jsf richfaces jsf-1.2 faces-config


    【解决方案1】:

    您可以在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>
    

    【讨论】:

    • 非常感谢您的建议,它很有效,很抱歉花了很长时间来实施和测试此建议;)
    猜你喜欢
    • 2018-10-21
    • 1970-01-01
    • 2015-02-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-04
    • 1970-01-01
    • 2015-12-14
    相关资源
    最近更新 更多