ページが初めて読み込ま@PostConstruct
れると が呼び出されますが、このページでポストバックを実行する@PostConstruct
と が再度呼び出されます。
すべてのポストバックではなく、最初のリクエストでのみ実行するにはどうすればよいですか?
@PostContruct
public void init() {
// charge combos....
}
public void submit() {
// action
}
ページが初めて読み込ま@PostConstruct
れると が呼び出されますが、このページでポストバックを実行する@PostConstruct
と が再度呼び出されます。
すべてのポストバックではなく、最初のリクエストでのみ実行するにはどうすればよいですか?
@PostContruct
public void init() {
// charge combos....
}
public void submit() {
// action
}
どうやら、あなたの Bean はリクエスト スコープであるため、すべての HTTP リクエストで再構築されます。@PostConstruct
フォーム送信エラーにつながる可能性のある「空の」Bean 状態になる可能性があるため、再度呼び出されないようにしたい理由が正確にはわかりませんが、次の場合にチェックを追加できます現在のリクエストはpostbackではありません。
public void init() {
if (!FacesContext.getCurrentInstance().isPostback()) {
// charge combos....
}
}
このようにして、「チャージコンボ」部分はポストバックで呼び出されません。
または、実際の質問は、「ポストコンストラクトがポストバックで呼び出されないようにする方法は?」ではなく、「ポストバックで同じ Bean インスタンスを保持する方法は?」である可能性があります。その場合、Bean をリクエスト スコープではなくビュー スコープに配置する必要があります。
@ManagedBean
@ViewScoped
public class Bean implements Serializable {
// ...
}
アクション メソッドから戻る限りnull
、ポストバックによって同じビューと対話している限り、この方法で同じ Bean インスタンスが存続します。この方法では、@PostConstruct
は呼び出されません (単に Bean が再構築されていないためです)。