このシナリオがあります。primefacesウィザードコンポーネントの最初のタブに、いくつかのフィールドとボタンがあります。ボタンは、いくつかのデータを保存し、いくつかのビジネスロジックを実行し、その結果を使用して、フォームの特定のフィールドに関連しないフォームBean(ViewScopeにある)のいくつかのプロパティを設定します。アプリケーションの呼び出しフェーズで、値が正しく設定されていることを確認しました。
2番目のタブには、最初のタブで設定された値を使用してビジネスロジックを実行する必要がある別のボタンがありますが、デバッグを実行すると、フォームのどのフィールドにも関連していなくても、値が上書きされていることに気付きました。 2番目のボタンをクリックしたときに呼び出されるモデルの更新フェーズ中。
どうすればこれを回避できますか?正しい動作を取得する方法はありますか?
周りを見回しましたが、複数の送信があるウィザードフォームの例が見つかりませんでした。手伝ってくれてありがとう!
<p:wizard widgetVar="wiz" render="true" id="wizard" showNavBar="false">
<p:tab id="step0" title="Step0" step="0">
<!-- Some other fields-->
<p:commandButton value="Save and do some business logic"
action="#{formBean.save}"
oncomplete="wiz.loadStep (wiz.cfg.steps [1], false)">
</p:commandButton>
</p:tab>
<p:tab id="step1" title="Step1" step="1">
<!-- Some other fields-->
<p:commandButton value="Second button: use the previous informations"
action="#{formBean.doSomething}"
oncomplete="wiz.loadStep (wiz.cfg.steps [2], false)">
</p:commandButton>
</p:tab>
</p:wizard>
編集:
例を示すために、私のBeanにはビジネスロジックオブジェクトが含まれていると言えます。最初の送信時に、このオブジェクトは保存されているため、データベース(MysqlおよびHibernate)はそれにプログレッシブIDを割り当てます。
2回目の送信時に、このIDを読み取ろうとすると、値がゼロになるため、明らかにエラーが発生します。
何かのようなもの:
public class FormBean{
private BLObject object;
// Constructor Getters and setters
// Method executed during the first submission
public void save(ActionEvent actionEvent) {
//Save the object and set his id
PersistanceClass.getInstance().save(object);
}
// Method executed during the second submission
public void doSomethingWhitTheId(ActionEvent actionEvent) {
//Access the id... id=0 returned
int id = object.getId();
}
}