当前位置: 首页 > 面试题库 >

提交后发生验证错误时,请保持p:dialog打开

佘飞鸣
2023-03-14
问题内容

最小示例对话框:

<p:dialog header="Test Dialog"  
          widgetVar="testDialog"> 
  <h:form> 
    <p:inputText value="#{mbean.someValue}"/>

    <p:commandButton value="Save" 
                     onsuccess="testDialog.hide()" 
                     actionListener="#{mbean.saveMethod}"/> 
  </h:form>       
</p:dialog>

我想要做的是让mbean.saveMethod以某种方式阻止对话框在出现问题时关闭,并且仅通过咆哮声输出消息。在这种情况下,验证程序无济于事,因为在将保存提交到后端服务器之前,无法确定someValue是否有效。当前,我使用visible属性进行此操作,并将其指向mbean中的布尔值字段。那行得通,但是它却使用户界面变慢,因为弹出或弹出对话框需要点击服务器。


问题答案:

onsuccess运行,如果AJAX请求本身是成功的(即有没有网络故障,未捕获的异常等),如果不采取行动方法成功地调用。

给定一个<p:dialogwidgetVar="testDialog">,您可以删除onsuccess并将其替换为RequestContext#execute()内部的PrimeFacessaveMethod()

if (success) {
    RequestContext.getCurrentInstance().execute("PF('testDialog').hide()");
}

注意:PF()在PrimeFaces 4.0中引入。在较旧的PrimeFaces版本中,您需要testDialog.hide()使用。

如果您不想使用特定于视图的脚本使控制器混乱,则可以改用oncomplete提供args具有布尔validationFailed属性的对象

<p:commandButton ...
    oncomplete="if (args &amp;&amp; !args.validationFailed) PF('testDialog').hide()" />

if(args)检查是必要的,因为发生ajax错误时可能不存在该检查,因此在尝试获取validationFailed该错误时会导致新的JS错误。出于此答案中所述的原因,&amp;而不是必选,如果需要,可以重构为调用的JS函数,如验证失败时保持<p:dialog>打开中所示。&

如果然而,没有验证错误和操作方法被成功触发,而你仍想保留,比如,因为异常的服务方法调用的对话框打开,这时你可以手动触发validationFailedtrue通过明确从内支持bean的操作方法调用FacesContext#validationFailed()。例如

FacesContext.getCurrentInstance().validationFailed();


 类似资料:
  • 问题内容: 我有一个表格,如果单击“提交”,则需要显示验证错误消息。 这是一个工作的家伙 用户开始进行更改时,验证工作正常。但是它不会显示任何错误消息。如果单击“提交”而不输入任何内容。 有实现这个的想法吗?或者以其他方式如何在单击“提交”按钮时使每个输入字段$ dirty 问题答案: 我在http://jsfiddle.net/thomporter/ANxmv/2/上找到了这个小提琴,它巧妙地进

  • 问题内容: 请原谅我; 我对Struts有点陌生。我遇到一个问题,即页面加载而不是我实际提交表单时发生了验证。我整日都在论坛上搜寻和搜寻,没有任何运气。我显然做错了一些事情,应该很容易确定,但是我还没有发现问题所在。 这是我的struts.xml的片段: 如您所见,如果验证成功,我有一个动作要提交给results.jsp。否则,我希望它再次显示我的index.jsp。据我所知,这些页面可以正确导航

  • 问题内容: 使用hibernate和mysql 5.5,我试图将字符串值保留在数据库表的TEXT类型列中。 厌倦了在提到的列中设置String值并试图持久化数据。但是我遇到了以下异常。我已经使用Netbeans 8.0生成了Entity类。 例外:- 创建SQL: 实体类 我还尝试通过删除来保留数据,它将数据保存为“ org.hibernate.engine.jdbc.BlobProxy@11e8

  • 本文向大家介绍Java后台开发之表单提交之前验证,包括了Java后台开发之表单提交之前验证的使用技巧和注意事项,需要的朋友参考一下 废话不多说了,具体代码如下所示: 以上所述是小编给大家介绍的Java后台开发之表单提交之前验证,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对呐喊教程网站的支持!

  • V9的验证码在生成后,会把验证码的数字存入Session当中。 V9在默认的情况下,Session是存放在数据库当中的。其在数据库中的表现如下: 您可以在访问后台登陆页后,查看一下数据库中Session这个表,如果表中没有类型的数据code|s:4:"***"; 那说明Session没有成功的写入到数据库中。 这会使你的登陆失败。 可以偿试通过修改"/caches/configs/s