保守案件(C#2.0)の改造話が出てきて落ち着かない今日この頃。JavaEE、いつまで触れるかな…。
……
…
今日はアクセス権限周りの実装準備のため、PhaseListener周りを色々お試し実装してました。
で、ふと、先日知ったpreRenderViewを思い出し、どういう関係なのか気になりました。
どっちが先なの?みたいな。
とりあえず試した実装です。
PhaseListenerは
package jp.co.hoge.phaselistner;
import javax.faces.event.PhaseEvent;
import javax.faces.event.PhaseId;
import javax.faces.event.PhaseListener;
public class ConfirmPhaseListener implements PhaseListener{
@Override
public void afterPhase(PhaseEvent event) {
System.out.println("afterPhaseが呼ばれたお:" + getPhaseId().toString());
}
@Override
public void beforePhase(PhaseEvent event) {
System.out.println("beforePhaseが呼ばれたお:" + getPhaseId().toString());
}
@Override
public PhaseId getPhaseId() {
return PhaseId.RENDER_RESPONSE;
}
}
として、faces-config.xmlに
<lifecycle>
<phase-listener>jp.co.hoge.phaselistner.ConfirmPhaseListener</phase-listener>
</lifecycle>
を追加。続けてpreRenderViewは
package jp.co.hoge.prerenderview;
import java.io.Serializable;
import javax.annotation.PostConstruct;
import javax.inject.Named;
import javax.enterprise.context.RequestScoped;
@Named(value = "preRenderViewBean")
@RequestScoped
public class PreRenderViewBean implements Serializable{
public PreRenderViewBean() {
System.out.println("PreRenderViewBeanコンストラクタ");
}
@PostConstruct
public void init(){
System.out.println("PreRenderViewBeanのPostConstruct");
}
public void preRenderViewListener(){
System.out.println("PreRenderViewBeanのメソッドpreRenderViewListnerだよ");
}
}
xhtmlは
<f:view>
<f:event listener="#{preRenderViewBean.preRenderViewListener()}" type="preRenderView" />
<h:head>
<title>Facelet Title</title>
</h:head>
<h:body>
Hello from Facelets
</h:body>
</f:view>
実行すると
情報: beforePhaseが呼ばれたお:RENDER_RESPONSE 6
情報: PreRenderViewBeanコンストラクタ
情報: PreRenderViewBeanコンストラクタ
情報: PreRenderViewBeanのPostConstruct
情報: PreRenderViewBeanのメソッドpreRenderViewListnerだよ
情報: afterPhaseが呼ばれたお:RENDER_RESPONSE 6
となりました。RenderResponse=preRenderViewってこと??あれ、なんか理解できてない気が。
てかコンストラクタが2回呼ばれるのもよくわからない…。
サンプルレベルだから定義しちゃったけど、BackingBeanでは@PostConstructしか使っちゃいけないのかな?うーん。
こういう変な所で悩んでしまう初心者な自分…。多分基礎的なことがわかってなさそうなので、明日落ち着いて調べます。
って、AdventCalendarの準備もしなきゃ(汗