为了账号安全,请及时绑定邮箱和手机立即绑定

提交后发生验证错误时,保持p:对话框打开

提交后发生验证错误时,保持p:对话框打开

提交后发生验证错误时,保持p:对话框打开最小示例对话框:<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以某种方式阻止对话框关闭,如果有问题并且只通过growl输出消息。这是验证器无法帮助的情况,因为在将保存提交给后端服务器之前无法判断someValue是否有效。目前我使用visible属性执行此操作,并将其指向mbean中的布尔字段。这有效,但它使用户界面变慢,因为弹出或关闭对话框需要命中服务器。
查看完整描述

3 回答

?
森林海

TA贡献2011条经验 获得超2个赞

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

给定一个<p:dialog widgetVar="testDialog">你可以删除onsuccess和替换PrimeFaces它RequestContext#execute()里面saveMethod()

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错误,从而引起新的JS错误,当你设法得到它可能是不存在的validationFailed,从它; 的&amp;,而不是&强制性的理由解释这个答案,如果有必要,你调用像JS功能,重构oncomplete="hideDialogOnSuccess(args, testDialog)"如图保持<P:对话框>打开时验证失败

后一种解决方案(稍加重写)应该适用于普通的jsf h:commandButton和一个f:ajax


令人遗憾的是,PrimeFaces不支持RichFaces已经支持的内容:EL on*属性的请求时重新评估。否则你也可以做到这一点:

<p:commandButton ...    oncomplete="if (#{not facesContext.validationFailed}) PF('testDialog').hide()" />



查看完整回答
反对 回复 2019-07-26
?
人到中年有点甜

TA贡献1895条经验 获得超7个赞

我刚刚用谷歌搜索了这个解决方案。基本上我的想法是使用actionListener而不是按钮的动作,并在支持bean中添加回调参数,然后检查按钮的oncomplete方法。示例部分代码:

JSF第一:

<p:commandButton actionListener="#{myBean.doAction}"
   oncomplete="if (!args.validationFailed &amp;&amp; args.saved) schedulesDialog.hide();" />

支持豆:

public void doAction(ActionEvent actionEvent) {
    // do your stuff here...
    if (ok) {
        RequestContext.getCurrentInstance().addCallbackParam("saved", true);
    } else {
        RequestContext.getCurrentInstance().addCallbackParam("saved", false);
    }}

希望这有助于某人:)


查看完整回答
反对 回复 2019-07-26
  • 3 回答
  • 0 关注
  • 533 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信