只是想知道为什么我会在我的应用程序中遇到这种行为。
我在 UI 中使用了 primefaces,几乎我所有的页面都遵循这种模式。我在所有 CRUD 操作中大量使用 AJAX,并使用对话框将其展示给用户。
<ui:composition template="myTemplate.xhtml">
<ui:define name="content">
<ui:include
src="/pages/CreateDialog.xhtml" />
<ui:include
src="/pages/UpdateDialog.xhtml" />
<ui:include
src="/pages/DeleteDialog.xhtml" />
</ui:define>
</ui:composition>
我唯一担心的是,在我的对话框中执行 CRUD 之后,用户不小心点击了 F5 或在浏览器上刷新,总是提到 FF/Chrome 和其他浏览器
To display this page, Firefox must send repeat action...
显然这会导致双重提交。以前我在旧应用程序的这种情况下使用 Post-Redirect-Get,但由于这是 AJAX JSF 更新,所以我不能这样做。
有什么解决方法,这是正常的吗?我认为在浏览器刷新期间不应再次触发 AJAX 操作。
帮助?
更新
我正在用这段代码打开我的对话框
<p:commandButton value="Add"
onclick="createWidget.show();"
update=":CreateForm"
action="#{MyBean.add}"
/>
我的创建对话框使用这个
<p:dialog header="Create">
<h:form id="CreateForm" prependId="false">
<p:commandButton value="Add" icon="ui-icon-plus"
actionListener="#{MyBean.add}"
update=":messageGrowl"
oncomplete="closeDialogIfSucess(xhr, status, args, createWidget 'createDialogId')"/>
</h:form>
</p:dialog>
我实际上正在关注这个站点的页面......完整的 WebApplication JSF EJB JPA JAAS