中年プログラマーの息抜き

ブログをはじめました。気の向くままにプログラム関連ネタをメモしていきます。

PhaseListener が2回呼ばれる件

JSFでリスナーが2回呼ばれる

・プロジェクト追加するときに作成されるweb.xmlで、「com.sun.faces.config.ConfigureListener(faces-config.xmlを使いますよというリスナ)」が定義されるのですが、これを削除すると解消しました。

検証

・PhaseListener
    @Override
    public void afterPhase(PhaseEvent arg0) {
         System.out.println("afterPhaseが呼ばれた:" + getPhaseId().toString());
    }
    @Override
    public void beforePhase(PhaseEvent phaseEvent) {
         System.out.println("beforePhaseが呼ばれた:" + getPhaseId().toString());
    }
    @Override
    public PhaseId getPhaseId() {
         return PhaseId.RENDER_RESPONSE;
    }

・2回呼ばれているときのSTDOUT
    beforePhaseが呼ばれた:RENDER_RESPONSE 6
    beforePhaseが呼ばれた:RENDER_RESPONSE 6
    [2016/08/15 15:24:10.381] Creating instance of bean 'login'
    ・・・
    [2016/08/15 15:24:10.381] Finished creating instance of bean 'login'
    afterPhaseが呼ばれた:RENDER_RESPONSE 6
    afterPhaseが呼ばれた:RENDER_RESPONSE 6

・正しく呼ばれるときのSTDOUT
    beforePhaseが呼ばれた:RENDER_RESPONSE 6
    [2016/08/15 15:29:52.390] Creating instance of bean 'login'
    ・・・
    [2016/08/15 15:29:52.390] Finished creating instance of bean 'login'
    afterPhaseが呼ばれた:RENDER_RESPONSE 6