【问题标题】:Keep p:dialog up when validation failed验证失败时保持 p:dialog up
【发布时间】:2015-03-09 10:32:05
【问题描述】:

我想要的是,如果发生验证错误,该窗口会保持打开状态,该窗口会打开以输入有关新用户(名称、密码、..)的一些信息。我已经尝试了其他帖子的许多解决方案,但它并没有保持开放。单击保存按钮后,它会关闭窗口。当我重新打开对话框时,我可以在必填(和无效)字段上看到红色突出显示。我希望你们能帮助我..我正在尝试解决这个问题 2 天...

<p:commandButton id="save" value="Save" udate="save" icon="ui-icon-disk"
        ajax="false" validateClient="true"
        action="#{userBean.addUser()}" oncomplete="if (args &amp;&amp; !args.validationFailed) PF('newUser').hide()" />
                        <!-- oncomplete="if (!args.validationFailed &amp;&amp;args.saved) PF('newUser').hide();"  -->
                        <p:commandButton id="cancel" value="Cancel" immidiate="true"
                        oncomplete="PF('newUser').hide()" />

【问题讨论】:

  • 您在提供的代码 sn-p 中在哪里使用 &lt;p:dialog&gt;?隐藏在newUser 后面吗?您通过单击&lt;p:commandButton&gt;(标记为Save)发送完整的同步请求。关于这种情况,您是否真的认为 oncomplete="if (args &amp;amp;&amp;amp; !args.validationFailed) PF('newUser').hide()" 可能像您已经猜到/想象/设想/可视化的那样工作?
  • 是的,它隐藏在 newUser 后面。那么根据这个解决方案stackoverflow.com/questions/9195756/… ,它实际上应该可以工作。

标签: validation jsf jsf-2 primefaces


【解决方案1】:

罪魁祸首在这里,在你的保存按钮上:

<p:commandButton ... ajax="false" />

Ajax 在按钮上被禁用。此按钮将不再异步提交表单。此按钮将同步提交表单,这始终意味着刷新整个页面。换句话说,这个按钮的行为与没有&lt;f:ajax&gt; 的标准&lt;h:commandButton&gt; 完全相同。一个老式的 Web 1.0 表单提交。所有与 ajax 相关的属性,如 oncompleteupdateprocess 等都被完全忽略。

从问题中不清楚为什么在该按钮上完全关闭了 ajax。如果这只是一个粗心的错误或不小心复制粘贴的结果,那么只需将其删除,世界应该会很好。

但是,如果您有正当的技术理由关闭 ajax(例如,因为该表单中有 &lt;p:fileUpload mode="simple"&gt;),那么您需要使用 &lt;p:dialog visible&gt; 属性。有了这个,您可以控制是否应在页面加载时显示对话框。

例如

<p:dialog ... visible="#{formName.submitted and facesContext.validationFailed}">
    <h:form binding="#{formName}">

    </h:form>
</p:dialog>

注意:代码是原样的。没有额外的 bean 属性。 For sure not on binding!

【讨论】:

  • 嘿巴鲁斯,谢谢你的提示。通过将可见属性添加到 并将绑定添加到
    解决了问题,窗口保持打开状态,直到输入正确的文本。如果有人不理解这里的可见属性是一个很好的解释(也来自 Balus..:):link
猜你喜欢
  • 2012-12-28
  • 1970-01-01
  • 2012-09-09
  • 2014-08-12
  • 2023-04-03
  • 1970-01-01
相关资源
最近更新 更多