一次长对话访问中可以包括多个页面,每个页面只处理部分数据,但不保存到数据库,最后一起提交到数据库。
长对话可以很好地记录下各部操作的状态,但是默认情况下 flush-mode 是自动更新的,每次页面请求结束后就会更新到数据库里,如果要统一提交就必须更改flush-mode 为manual,让每次操作都不更新到数据库,最后在一起em.flush();
在页面配置(refBspgen222.page.xml)中指定manual方式
<page>
<begin-conversation join="true" flush-mode="manual"/>
</page>
在最终要提交数据库的按钮上增加flush actionListener,如下所示
<a4j:commandLink actionListener="#{refBspgenparAction.save}" reRender="addPanel"
value="submit2" styleClass="button">
<f:actionListener binding="#{entitySupport.flush()}"/>
</a4j:commandLink>
中间不需要更新到数据库的页面上的按钮不要加<f:actionListener binding="#{entitySupport.flush()}"/>
备注:要保证entitySupport.flush()在refBspgenparAction.save之后再执行,要使用actionListener属性,而不是action属性