【问题标题】:How to keep "MODAL" with form open on Managed bean validation?如何在托管 bean 验证中保持表单打开的“模式”?
【发布时间】:2016-02-10 13:22:32
【问题描述】:

我正在使用 JSF 和 botstrap。 我创建了一个带有要提交的值的弹出窗口。 单击提交按钮时,我调用了一个 managedBean 函数,其中我做了一些验证,例如:-

FacesContext.getCurrentInstance().addMessage( "password:newUserPassword2", new FacesMessage("密码至少应包含 8 个字符"));

但是当我单击提交按钮时,弹出窗口正在关闭,当我再次弹出窗口时,会显示消息。

如何防止弹出窗口关闭?

【问题讨论】:

  • 那么,在您有机会检查是否有任何验证错误之前,您会在 onclick 期间立即关闭弹出窗口?
  • 当你说“弹出”你的意思是Modal?
  • @MarceloBarros:模态与否不应该有所作为
  • BalusC 间接说的是:创建一个minimal reproducible example 另见stackoverflow.com/tags/jsf/info
  • @Marcelo Barros:是的,我的意思是“模态”,我是引导程序的新手

标签: jsf


【解决方案1】:

经过大量研究找到了解决方案。 我使用 f:ajax 来防止弹出窗口像

一样关闭弹出窗口
<h:commandButton id="submitPassword" action="#{managedBean.managedBeanFunction}" value="Submit">
                        <f:ajax execute="formId" render="formId" />
                    </h:commandButton>

在 managedBeanFunction 中,我们将一个标志设置为 true(如果所有验证都通过了),它可以从 JSF 访问。 在模态部分我们将在检查标志后编写一个脚本段

<h:panelGroup layout="block" id="messages" rendered="#{managedBean.managedBeanFlag == 'true'}">
                <script language="JavaScript" type="text/javascript">
                    // <![CDATA[
                           $('#closeButtonId').click();
                    // ]]>
                </script>
            </h:panelGroup>

这样,如果未设置标志,则不会调用脚本函数,因此弹出窗口不会关闭

【讨论】:

  • 清洁工是rendered="#{facesContext.postback and not facesContext.validationFailed}"
  • 另外,我问它是否是Modal,因为有一个特定的javascript可以关闭它:$('#myModal').modal('hide')
猜你喜欢
  • 2014-05-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-10-09
  • 2023-03-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多