1

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

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

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

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

4

1 回答 1

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>
于 2012-03-15T12:42:37.087 回答