只想知道为什么我会在我的应用程序中遇到此行为。防止在JSF对话框上双重提交AJAX CRUD
我用于用户界面的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操作。
帮助?
UPDATE
我打开我的对话框与此代码
<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>
其实我是跟着从这个网站的网页... Full WebApplication JSF EJB JPA JAAS
如果你只使用ajax,那实在是不可能的。预先通过同步POST请求打开页面?也许你正在通过commandlinks而不是正常(输出)链接进行导航? – BalusC
但显然这是我的情况。我已更新我的帖子以获取更多信息 –
还检查萤火虫,发现我的commandbutton正在发射同步请求而不是ajax样式。我试着设置属性ajax =“true”,但这并没有解决问题。任何提示,请问为什么按钮的行为是这样的? –