2011-04-05 124 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