我有一个页面模态对话框,如果用户单击编辑按钮,则会呈现该对话框。该对话框要求输入用户名和密码,并有一个提交按钮。如果用户名和密码未验证,则会显示错误。
问题在于,如果用户名和密码未进行身份验证,则每次身份验证失败时,模式背景会越来越暗。
会导致什么?
<p:dialog id="dialog" header="Login To Edit" widgetVar="dialog" visible="#{fundingBacker.loginVisible}" modal="true"
resizable="false" closable="false" draggable="true" rendered="#{!userBean.loggedIn}">
<h:form>
<p:ajaxStatus style="width:16px;height:16px;">
<f:facet name="start">
<p:graphicImage value="../images/loading4.gif" />
</f:facet>
<f:facet name="complete">
<h:outputText value="" />
</f:facet>
</p:ajaxStatus>
<p:messages autoUpdate="true" showDetail="true" />
<h:panelGrid columns="2" cellpadding="5">
<h:outputLabel for="lanId" value="LanID:" />
<p:inputText value="#{currentUser.lanID}" id="lanId" required="true" label="lanId" requiredMessage="Lan ID is required" />
<h:outputLabel for="password" value="Password:" />
<p:password value="#{currentUser.password}" id="password" required="true" label="password" feedback="false" requiredMessage="Password is required" />
<p:commandButton id="loginButton" value="Login" type="submit" styleClass="primaryButton" action="#{currentUser.performLogin}" update="dialog"/>
</h:panelGrid>
</h:form>
</p:dialog>
答案 0 :(得分:3)
您每次都在更新对话框而不先关闭它。我不确定它是否是错误或功能,但由于visible
属性,重叠会在每次对话更新时重新初始化。您可能想要将它报告给PrimeFaces的人以及更紧凑的测试用例。
最简单的解决方案就是关闭ajax成功的对话框。它会被重新显示得比最终用户眨眼更快。
<p:commandButton ... onsuccess="dialog.hide()" update="dialog" />
您可能只需要微调visible
和rendered
属性,以确保在验证失败时重新打开对话框(例如,当用户仍未登录时)。
另一种方法是更新对话框的表单而不是对话框本身。
<p:commandButton ... update="@form" />
或者只是完全删除该属性。它默认为@form
。
<p:commandButton ... />
成功登录后关闭对话框可由RequestContext#execute()
完成。
RequestContext.getCurrentInstance().execute("dialog.hide()");
答案 1 :(得分:1)
这是3.1.Final中修复的错误;
答案 2 :(得分:0)
每次向服务器发出请求后,您的对话框都会重复。尝试设置对话框属性appendToBody="true"
,以防止这种情况发生。