我有这种情况:在 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();
}
}