0

コンストラクターの画面で使用されるすべてのドメインオブジェクトをインスタンス化するマネージドビーン AddDeviceBean があります

public AddDeviceBean() {
    device = new DeviceVO();
    deviceacct = new DeviceAccountsVO();
    deviceconfig = new DeviceConfigVO();
    devicecurr =new DeviceCurrencyVO();
    devicelink = new DeviceLinkVO();
    devicetran = new DeviceTranVO();
    devicecd = new DeviceCDVO();
    deviceBlank = new DeviceBlankVO();
    comments = new ArrayList<DeviceCommentsVO>();

}

ページロード時にプロパティに次の値を設定する必要がある DB2 シーケンスがあります。

@PostConstruct アノテーションを使用して次の値を生成し、値を設定しています。

問題は、同じ Bean でいくつかのメソッドを呼び出す画面に commandButton があり、送信後に @PostConstruct が 2 回呼び出され、DB2 の次の値が呼び出されることです。

次の値を取得する必要があるのは、送信中ではなく、ページの読み込み中に 1 回だけです

4

1 に答える 1

1

これは、マネージド Bean がリクエスト スコープである場合に実際に発生します。リクエスト スコープの Bean は、HTTP リクエストごとに構築されます。最初のリクエストは 1 つのリクエストとしてカウントされます。フォームの送信 (ポストバック) は、別の要求としてカウントされます。

同じビューと対話している限り Bean を存続させたい場合は、代わりにビュースコープにする必要があります。

@ManagedBean
@ViewScoped
public class AddDeviceBean {
    // ...
}

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

于 2013-11-13T11:40:02.507 に答える