2008-12-19 52 views
0

我正在開發一個使用Spring WebFlow 2,Facelets和JSF的應用程序。我的一個流程確實有一個頁面,必須在某些事件中觸發表單提交。對於每一個不同的行動,都必須提出不同的觀點。所以,我試圖激活下面的JavaScript代碼來執行提交:Javascript表單提交以激活Spring Web Flow轉換與JSF集成

function myFormSubmit(eventId) { 
    var formAction = document.myForm.action; 
    document.myForm.action = formAction + '&_eventId=' + eventId; 
    document.myForm.submit(); 
} 

可惜的是,這不會觸發我的流程所請求的轉變。該頁面不會更改。有誰知道如何處理這個?

感謝, 亞歷山大

+0

此活動如何附加到您的表單上?什麼激活它? – krosenvold 2008-12-19 16:23:46

+0

定期表單元素事件? onchange,onclick等等! – Alexandre 2008-12-19 16:31:19

+0

請提供您嘗試提交的表單的HTML,這使得回答您的問題變得更容易。 – 2008-12-19 18:08:30

回答

1

我已經在Spring WebFlow論壇中找到了解決方案。根據Jeremy Grelle的說法,在將Spring WebFlow集成到JSF時,「_eventId」參數的提交不會觸發轉換。他給出的解決方案是創建一個JSF PhaseListener,它在發送「_eventId」參數時創建JSF操作。

phaseListener代碼可以在http://forum.springsource.org/showthread.php?p=219358#post219358處看到。

0

您是否在尋找這個參數在你的GET params中,你的post數據? 它不會出現在POST中。

更新:

好了,所以要說明這一點,試試這個...

改變你的函數來做到這一點:

任何(非IE)
function myFormSubmit(eventId) { 
    var formAction = document.myForm.action; 
    //document.myForm.action = formAction + '&_eventId=' + eventId; 
    var myAction = document.createElement('input'); 
    myAction.setAttribute('name', '_eventId'); 
    myAction.setAttribute('type', 'hidden'); 
    myAction.setAttribute('value', eventId); 
    document.myForm.appendChild(myAction); 
    document.myForm.submit(); 
} 

測試*瀏覽器,看看它是否有效。如果是這樣,GET與POST參數是問題。

* non-IE: trying to set the name or type in IE will FAIL, thus don't test there. 
+0

我不確定我是否理解了您的問題,但我正在嘗試做的是將參數'_eventId'添加到我的POST請求中。使用螢火蟲調試請求,它會添加參數,但它沒有被處理,因爲我認爲服務器 – Alexandre 2008-12-19 16:49:43

1

不知道SringFaceletsSF什麼,但我認爲,事件處理程序也許應該返回true。否則,您的瀏覽器將不會提交表單。

這樣:

function myFormSubmit(eventId) { 
    var formAction = document.myForm.action; 
    document.myForm.action = formAction + '&_eventId=' + eventId; 
    document.myForm.submit(); 
    return true; 
} 
1

在仔細檢查,有一堆與此代碼的問題。

document.myForm.action是獲取元素的非標準方法。更好的,跨瀏覽器的方法是:

document.getElementById('myFormId'); 

盲目追加與號形式行動URL假定已經有另一個URL參數,所以已經存在的URL後一個問號。如果不是這種情況下,下面換行符:

document.myForm.action = formAction + '&_eventId=' + eventId; 

最後,如果你調用這個函數作爲onsubmit處理,我相信你應該只返回true,而不是調用myForm.submit()方法

0

修改form.action是向表單提交添加信息的一種非常糟糕的方式。我建議在你的表單中加入一個隱藏的輸入,你可以用你的eventID填充。

0

是否有任何理由不能使用SWF附帶的Spring Faces組件?有一個你可以用來包裝元素的ajaxEvent標籤。它激活給定的javascript事件(onclick,onchange)並調用你選擇的動作。