1

アプリケーション内のすべてのメッセージが常にユーザーに表示される、一種のログ表示をユーザーに実装することを考えていました。

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

また、さまざまなリクエストでfacesmessagesがクリアされることも知っています。それが私の質問がある場所で、さまざまなリクエストでメッセージを保存するためです:)

セッション変数などを保存することで、さまざまな方法で処理できます...すべての可能な回答をいただければ幸いです

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 に答える