これが私の状況です。
私はデータテーブルとBeanに裏打ちされたいくつかのボタンを備えたページを持っています。Beanは、いくつかのデフォルトのプロパティで初期化する必要があります。そのプロパティは、アクションに応じて変更できます。RequestScopedBeanと@PostConstruct注釈付きメソッドから始めました。しかし、datatableはView(Session)scopedでのみうまく機能するようです。これで、私のセットアップは次のようになります。
@ManagedBean
@ViewScoped
public class ProductsTableBean implements Serializable {
private LazyDataModel<Products> productsData;
@Inject
private ProductsFacade model;
public void onPageLoad() {
// here some defaults are set
// ...
System.err.println("onPageLoad called");
}
public void addRow() {
// andhere some defaults redefined
// ...
System.err.println("addRow called");
}
...
およびjsfページからのスニペット:
<p:commandButton action="#{productsTableBean.addRow()}"
title="save"
update="@form" process="@form" >
</p:commandButton>
...
<f:metadata>
<f:event type="preRenderView" listener="#{productsTableBean.onPageLoad}"/>
</f:metadata>
そして、これが呼び出し順序で発生する主な問題です、私は次の出力を持っています:
onPageLoad called
addRow called
onPageLoad called <-- :(
しかし、次のように、addRowを最後に呼び出すアクションにします。
onPageLoad called
addRow called
ここに簡単な解決策はありますか?