マネージド Bean のように見え@SessionScoped
、コンストラクターは、Bean が使用されたときにユーザーがページに初めてアクセスしたときにのみ呼び出されます。
JSF 2 では、Managed Bean を に変更することでこれを実現できます@ViewScoped
。
@ManagedBean
@ViewScoped
public class Bean {
public Bean() {
}
@PostConstruct
public void init() {
clearMsg();
}
}
BalusC は、この回答で JSF Managed Bean スコープについて適切な説明を提供しています: How to choose the right bean scope? . また、回答の下部にあるリンクを読んで、これらの概念をよりよく理解することをお勧めします。
JSF 1.x では、マネージド Bean を構成して、faces-config.xml
ファイルでスコープを要求clearMsg
し、@PostConstruct public void init
メソッドで を呼び出す必要があります。clearMsg
これは、マネージド Bean クラスの作成を含むすべてのリクエスト (ajax リクエストも含む) でメソッドが呼び出されることを意味することに注意してください。この問題を解決するには、JSF コードでこの Bean を呼び出す方法とタイミングに関する詳細情報を提供する必要があります。デフォルトでは、セッションにフラグを設定し、clearMsg
メソッド (または一度だけ呼び出す必要があるメソッド) を呼び出す前にこのフラグをチェックすることで、これを解決できます。
public class Bean {
public Bean() {
}
@PostConstruct
public void init() {
HttpSession session = ((HttpRequest)FacesContext.getCurrentInstance().
getExternalContext().getRequest()).getSession();
if (session.getAttribute("flag") == null) {
clearMsg();
//other methods...
}
}
}
顔の構成
<managed-bean>
<managed-bean-name>bean</managed-bean-name>
<managed-bean-class>your.package.Bean</managed-bean-class>
<managed-bean-scope>request</managed-bean-scope>
からのアノテーション@ViewScoped
を使用して、リクエスト スコープの Managed Bean を にシミュレートする方法があります。明示的なリダイレクトを行ってビューを変更するまで、Bean は有効であることを考慮してください。これに基づいて、コードは次のようになります。@KeepAlive
RichFaces 3
@KeepAlive
public class Bean {
public Bean() {
}
@PostConstruct
public void init() {
//no need to use session flags
clearMsg();
//other methods...
}
}