Как сохранить все сообщения Faces по разным запросам - PullRequest
1 голос
/ 15 марта 2012

Мне просто интересно реализовать своего рода отображение журнала для пользователя, где все сообщения в приложении отображаются для пользователя все время.

Поскольку я использую JSF 1.2 и RF 3.3.3, я хотелзнать, возможно ли сохранить все сообщения, если они будут добавлены различными запросами, и отобразить их пользователю, чтобы пользователь знал историю действий, которые он совершил.Группе поддержки также полезно проанализировать причину проблемы, и он может отправлять сообщения разработчику, если это необходимо смоделировать или отладить также.

Я также знаю, что сообщения facems очищаются по разным запросам, вот игде мой вопрос заключается в том, чтобы сохранять сообщения по разным запросам:)

Может обрабатываться различными способами, сохраняя их в переменной сеанса или около того ... Я был бы признателен за все возможные ответы

1 Ответ

2 голосов
/ 15 марта 2012

Вы можете собрать все сообщения во время ответа рендеринга в 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>
...