0

我有这种情况:在 primefaces 向导组件的第一个选项卡中,我有一些字段和一个按钮。该按钮保存一些数据,执行一些业务逻辑,并使用结果设置表单 bean(位于 ViewScope 中)的一些属性,这些属性与表单的特定字段无关。我检查了在调用应用程序阶段,这些值设置正确。
在第二个选项卡中,我有另一个按钮,它必须使用第一个选项卡设置的值执行一些业务逻辑,但是在进行一些调试时,我注意到这些值,即使与表单的任何字段无关,也会被覆盖,我认为在我单击第二个按钮时调用的更新模型阶段。

我怎样才能避免这种情况?有没有办法获得正确的行为?
我环顾四周,但找不到任何包含多个提交的向导表单的示例。感谢帮助!

<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。
在第二次提交期间,当我尝试读取此 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 向导使用字符串来标识选项卡。返回此 String 的值(非 null 或 void)会使视图 bean 超出范围。当你有一个简单的表单时没关系,但是如果你想在流程中设置一些与表单元素无关的属性,它们会在选项卡更改期间被覆盖。
我解决了向表单添加链接到我想要保留的属性的隐藏参数的问题。

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