0

このシナリオがあります。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();

      }
}
4

1 に答える 1

0

問題は、あるページから別のページに移動するPrimefacesウィザードが、文字列を使用してタブを識別することでした。nullでもvoidでもないこの文字列の値を返すと、ビューBeanがスコープ外になります。単純なフォームであれば問題ありませんが、フロー中にフォーム要素に関連しないいくつかのプロパティを設定したい場合は、タブの変更中にそれらが上書きされます。
保存したいプロパティにリンクされた非表示のパラメーターをフォームに追加する問題を解決しました。

<h:inputHidden value="formBean.idToPreserve" id="inputHidden" />
于 2012-11-30T10:47:44.213 に答える