只想知道爲什麼我會在我的應用程序中遇到此行爲。防止在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」,但這並沒有解決問題。任何提示,請問爲什麼按鈕的行爲是這樣的? –