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で行っているみたいですね。
ということでここまでです。