我正在研究一個應用程序,用戶將在評估一件藝術品時填寫評論表單。他們可能會在表單上花費大量時間,因此我想每5分鐘自動爲用戶保存一次。我希望我可以使用JavaScript並設置一個計時器5分鐘,然後讓它基本上通過Ajax執行整個表單,我可以將數據保存到數據庫,以防用戶斷開連接等。不幸的是,我似乎無法找到任何方式來做到這一點。使用數據更新模型並不是問題,但我無法弄清楚如何讓它調用方法(類似於提交時通常的動作)。我不想或不需要它重新渲染任何東西,只是讓我調用一個方法來保存數據。我怎樣才能做到這一點?使用jsf 2.0 ajax庫調用方法
問題實施解決方案
我試圖實現隱藏的命令鏈接的解決辦法,但我得到了一些非常奇怪的行爲。我不確定是什麼導致了這一點。首先是一些實施背景。表單#1創建一個bean(None範圍)並將其放入Flash中,然後重定向到Form#2。 Form#2是我正在寫的關於實現自動保存的大型表單。 Form#2有一個ViewScoped bean。在此Bean的PostConstruct中,它從閃存中檢索值,並填充屬性字段。到現在爲止還挺好。這完美無缺的JavaScript。我可以按命令按鈕提交表單,一切都很好。但是,當我介紹JavaScript時,它執行時,我從變量中得到一個空指針異常,該變量應該由PostConstruct從Flash中填充。這個JavaScript如何幹擾?一旦我使用這個對象填充了視圖範圍的bean的屬性,它從flash範圍中移除應該沒有關係,對嗎?僅供參考,如果我只刪除JavaScript代碼並保留其他所有內容,當我按下按鈕提交時,它會恢復正常工作。
表#爲someRequestScopedBean.Method 1
<h:form>
... bunch of form objects ...
<h:commandButton "Start New" action="#{someRequestScopedBean.someMethod"/>
</h:form>
代碼:
public String someMethod() {
// bunch of logic here
FacesContext.getCurrentInstance()
.getExternalContext()
.getFlash()
.put("myFlashObj", myFlashObj);
return "form2?faces-redirect=true";
}
視圖作用域在形式2中使用的豆:
@ManagedBean
@ViewScoped
public class someViewScopedBean {
//bunch of properties here
@PostConstruct
public void initialize() {
this.myObject = (MyObject) FacesContext.getCurrentInstance()
.getExternalContext()
.getFlash()
.get("myFlashObject");
public void saveDraft() {
// save to database
}
}
形式2頁:
<h:outputScript library="javax.faces" name="jsf.js"/>
<h:form id="myForm">
... whole bunch of fields here ...
... real button for user to submit ...
<h:commandButton value="Submit myForm"
action="#{someViewScopedBean.save}" />
... hidden button for auto-save by javascript ...
<h:commandLink id="hiddenSaveDraft" style="display: none;"
action="#{someViewScopedBean.saveDraft}" >
<f:ajax execute="@form" />
</h:commandLink>
<script>
function saveDraft() {
document.getElementById('qForm:hiddenSaveDraft').onclick();
window.setTimeout('saveDraft()',15000);
}
saveDraft();
</script>
</h:form>
這是解決不同於最初問題的問題的解決方案。 – BalusC 2012-04-04 15:24:06
嗨@巴魯斯,不完全。它解決了我最初的問題,即如何自動調用save方法。當我遇到JavaScript問題時,我實際上是在嘗試實施您的建議。我是新來的;如果我沒有正確處理這種情況,我有興趣學習更好的方法。順便說一下,你的原始答案發生了什麼? – tcprogrammer 2012-04-04 20:13:56