【问题标题】:richfaces show modalPanel if long page loading time, not showing modalPanel when page load fast如果页面加载时间长,richfaces 显示 modalPanel,页面加载快速时不显示 modalPanel
【发布时间】:2011-04-05 02:02:59
【问题描述】:

我使用 modalpanl 来防止用户多次单击提交按钮,如下面的代码。 但是,当在同一页面上进行表单验证时,它也会带出模态面板。因为验证是一个非常快速的过程,模态面板在很短的时间内被带出并被清除。比如 0.5 秒。它对用户来说就像是一个闪光,它会给用户带来不好的体验。 无论如何只有在加载页面需要超过 1 秒时才显示 modalPanel。

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

【问题讨论】:

  • 不要认为有一种简单的方法可以实现这一点。验证时不要显示模态面板。

标签: richfaces


【解决方案1】:

您似乎想防止表单多次提交。您可以简单地使用其onclick 属性禁用提交按钮。在表单验证过程中,如果出现任何验证错误,提交按钮应该启用返回。

当提交按钮的操作方法完成时,如果提交按钮的rendered 属性不依赖于任何Mbean 值,您可以简单地使用它的oncomplete 属性重新启用提交按钮。如果提交按钮的rendered属性依赖于一些MBean的属性,并且这些属性有可能在action方法中被改变,那么你应该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')}"/>

我认为这种方法比使用ModalPanel 方法阻止表单多次提交更直接、更易于理解和维护。

【讨论】:

  • 嗨,Ken,我用的和你的一样,但是如果要提交的表单很大,可能需要 5~10 秒,最好显示一个模态面板或进度条,否则用户可能会离开当前页面。你怎么看?谢谢。
  • @Kevin ,我想您可以尝试使用a4j:push 显示类似the form is submitting , please wait 的消息来通知用户。您可以查看演示以了解a4j:push 可以做什么livedemo.exadel.com/richfaces-demo/richfaces/… 。我之前没试过,但似乎可以。
猜你喜欢
  • 2011-10-15
  • 1970-01-01
  • 2011-07-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多