2011-04-05 127 views
1

我使用modalpanl來防止用戶多次單擊提交按鈕,如下面的代碼。然而,當在同一頁面上存在表單驗證時,它也會帶出模式面板。因爲驗證是一個非常快速的過程,模態面板被帶出並在很短的時間內被清除,如0.5秒。它對用戶來說看起來像一個閃光燈,並且會導致不好的用戶體驗 反正只有當它加載一個頁面需要1秒以上時才顯示modalPanel。richfaces如果長頁面加載時間顯示modalPanel,當頁面加載快時不顯示modalPanel

onclick =「Richfaces.showModalPanel('InProgress');」 oncomplete =「Richfaces.hideModalPanel('InProgress');」

+0

不要認爲有一個簡單的方法來實現這一點。驗證時不要顯示模態面板。 – 2011-04-05 16:27:39

回答

1

看來你想阻止多個提交表單。您可以使用其onclick屬性簡單地禁用提交按鈕。在表單驗證過程中,如果有任何驗證錯誤,提交按鈕應該啓用。

當提交按鈕的操作方法完成時,如果提交按鈕的rendered屬性不依賴於任何Mbean值,則可以使用其oncomplete屬性簡單地啓用提交按鈕。如果提交按鈕的rendered屬性取決於某些MBean的屬性,並且有可能在操作方法中更改這些屬性,那麼您應該提交按鈕reRender

例如,

如果提交按鈕的rendered屬性不依賴於任何MBean的數值

<a4j:commandButton id="submitBtn" value="Submit" action="#{MBean.action}" onclick="this.disabled=true" oncomplete="this.disabled=false"/> 

如果提交按鈕的rendered屬性取決於一些的Mbean值

<a4j:commandButton id="submitBtn" value="Submit" action="#{MBean.action}" onclick="this.disabled=true" rendered="#{MBean.someValue}" reRender="#{rich:clientId('submitBtn')}"/> 

我認爲這種方法比使用更直接,更容易理解和維護阻止來自多個提交的表單的方法。

+0

嗨,我使用和你一樣的東西,但是如果有大型表單需要提交,可能需要5〜10秒,最好是顯示一個模態面板或進度條,否則用戶可能會離開當前頁面。你怎麼看?謝謝。 – 2011-08-27 09:12:14

+0

@Kevin,我想你可能會嘗試使用'a4j:push'來顯示一個類似於'表單正在提交,請稍候'的消息來通知用戶。你可以看看演示,看看'a4j:push'可以在http://livedemo.exadel.com/richfaces-demo/richfaces/push.jsf?tab=usage&cid=688408。我沒有嘗試過,但似乎有可能。 – 2011-08-29 01:26:22