SE成長痛日記

アラサーSEが技術力を高めるために日々感じる痛みを綴るBlogです。

JSFのライフサイクルを理解する

前回で、初期表示 → サーバ処理 → 再表示という 単純な挙動の処理を実装したので、

ここで改めて、各ライフサイクルがどう動いているかがわかるように、 少しコードをいじりたいと思います。

管理Beanを次のように編集してBeanのライフサイクルを見てみます。。

    /**
     * Creates a new instance of ResponseBean
     */
    public ResponseBean() {
        System.out.println("Viewスコープのコンストラクタ");
        this.defaultName = "名前";
        this.defaultEMail = "E-Mail";
    }
    
    @PostConstruct
    public void init(){
        System.out.println("ViewスコープのPostコンストラクタ");
    }    
    
    @PreDestroy
    public void terminate(){
        System.out.println("ViewスコープのPreDestroy");
    }
    

またJSFのライフサイクルが観れるようにします。(Perfect Java EE参考)

package jp.hirohisoex.javawebapplication;

import javax.faces.event.PhaseEvent;
import javax.faces.event.PhaseId;
import javax.faces.event.PhaseListener;

/**
 *
 * @author hirohiso
 */
public class CheckPhaseListener implements PhaseListener{

    @Override
    public void afterPhase(PhaseEvent pe) {
        System.out.println("after:"+pe.getPhaseId());
    }

    @Override
    public void beforePhase(PhaseEvent pe) {
        System.out.println("before:"+pe.getPhaseId());
    }

    @Override
    public PhaseId getPhaseId() {
        return PhaseId.ANY_PHASE;
    }
    
}
<?xml version="1.0" encoding="UTF-8"?>
<faces-config xmlns="http://xmlns.jcp.org/xml/ns/javaee"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-facesconfig_2_2.xsd"
  version="2.2">
    <lifecycle>
        <phase-listener>jp.hirohisoex.javawebapplication.CheckPhaseListener</phase-listener>
    </lifecycle>
</faces-config>

これで表示、投稿ボタンを実行すると以下のようにコンソールに出力されます。

23:19:30,306 INFO  [stdout] (default task-1) before:RESTORE_VIEW 1

23:19:30,377 INFO  [stdout] (default task-1) after:RESTORE_VIEW 1

23:19:30,378 INFO  [stdout] (default task-1) before:RENDER_RESPONSE 6

23:19:30,590 INFO  [stdout] (default task-1) Viewスコープのコンストラクタ

23:19:30,591 INFO  [stdout] (default task-1) ViewスコープのPostコンストラクタ

23:19:30,635 INFO  [stdout] (default task-1) after:RENDER_RESPONSE 6

23:21:31,580 INFO  [stdout] (default task-1) before:RESTORE_VIEW 1

23:21:31,619 INFO  [stdout] (default task-1) after:RESTORE_VIEW 1

23:21:31,619 INFO  [stdout] (default task-1) before:APPLY_REQUEST_VALUES 2

23:21:31,620 INFO  [stdout] (default task-1) after:APPLY_REQUEST_VALUES 2

23:21:31,621 INFO  [stdout] (default task-1) before:PROCESS_VALIDATIONS 3

23:21:31,665 INFO  [stdout] (default task-1) after:PROCESS_VALIDATIONS 3

23:21:31,665 INFO  [stdout] (default task-1) before:UPDATE_MODEL_VALUES 4

23:21:31,666 INFO  [stdout] (default task-1) after:UPDATE_MODEL_VALUES 4

23:21:31,666 INFO  [stdout] (default task-1) before:INVOKE_APPLICATION 5

23:21:31,672 INFO  [stdout] (default task-1) after:INVOKE_APPLICATION 5

23:21:31,672 INFO  [stdout] (default task-1) before:RENDER_RESPONSE 6

23:21:31,680 INFO  [stdout] (default task-1) after:RENDER_RESPONSE 6

管理Bean(VIewスコープ)の生成はRENDER_RESPONSEで行っているみたいですね。

ということでここまでです。