jakaruta.doc_021
最終投稿日:2026年07月26日
package view;
import java.io.Serializable;
import jakarta.annotation.PostConstruct;
import jakarta.faces.view.ViewScoped;
import jakarta.inject.Named;
@Named
@ViewScoped
public class NextBean implements Serializable {
private static final long serialVersionUID = 1L;
// コンストラクタ
@PostConstruct
public void init() {
System.out.println("ビーンが初期化されました!");
}
}
package view;
import java.io.Serializable;
import jakarta.faces.view.ViewScoped;
import jakarta.inject.Named;
@Named
@ViewScoped
public class NextBean implements Serializable {
private static final long serialVersionUID = 1L;
private boolean isFirstTiem = false;
// コンストラクタ
public void init() {
if (isFirstTiem) {
return;
}
System.out.println("ビーンが初期化されました!");
this.isFirstTiem = true;
}
}
package view;
import java.io.Serializable;
public abstract class BaseBean implements Serializable {
private static final long serialVersionUID = 1L;
protected boolean isFirstTiem = false;
protected static final String SELF = null;
public void init() {
if (isFirstTiem) {
return;
}
// 子がオーバーライドする
initialize();
// ライフサイクル中は初期化しない
isFirstTiem = true;
}
// 子の初期化メソッド定義
protected abstract void initialize();
}
package view;
import jakarta.faces.view.ViewScoped;
import jakarta.inject.Named;
@Named
@ViewScoped
public class NextBean extends BaseBean {
private static final long serialVersionUID = 1L;
@Override
public void initialize() {
System.out.println("ネクストビーンが初期化されました!");
}
}
親クラスの定義に『protected static final String SELF = null;』があるのを気が付きましたか。
実はPOST遷移のラスボスがいます!
それが遷移の指定方法なのですが、POST遷移は『.xhtml』名を記述すると思っていませんか?
これ他画面遷移であれば正しいのですが、自画面遷移の場合は《リダイレクト》と同じ扱いとなります。
<f:metadata>
<f:event type="preRenderView" listener="#{nextBean.init}" />
</f:metadata>