5

ページが初めて読み込ま@PostConstructれると が呼び出されますが、このページでポストバックを実行する@PostConstructと が再度呼び出されます。

すべてのポストバックではなく、最初のリクエストでのみ実行するにはどうすればよいですか?

@PostContruct
public void init() {
    // charge combos....
}

public void submit() { 
    // action 
}
4

2 に答える 2

7

どうやら、あなたの 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 が再構築されていないためです)。

以下も参照してください。

于 2012-11-06T13:53:59.013 に答える