当对话框中的操作失败时,Primefaces对话框背景不透明度加倍

时间:2012-01-30 15:04:59

标签: java jsf dialog primefaces opacity

我有一个页面模态对话框,如果用户单击编辑按钮,则会呈现该对话框。该对话框要求输入用户名和密码,并有一个提交按钮。如果用户名和密码未验证,则会显示错误。

问题在于,如果用户名和密码未进行身份验证,则每次身份验证失败时,模式背景会越来越暗。

会导致什么?

<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>

3 个答案:

答案 0 :(得分:3)

您每次都在更新对话框而不先关闭它。我不确定它是否是错误或功能,但由于visible属性,重叠会在每次对话更新时重新初始化。您可能想要将它报告给PrimeFaces的人以及更紧凑的测试用例。

最简单的解决方案就是关闭ajax成功的对话框。它会被重新显示得比最终用户眨眼更快。

<p:commandButton ... onsuccess="dialog.hide()" update="dialog" />

您可能只需要微调visiblerendered属性,以确保在验证失败时重新打开对话框(例如,当用户仍未登录时)。

另一种方法是更新对话框的表单而不是对话框本身。

<p:commandButton ... update="@form" />

或者只是完全删除该属性。它默认为@form

<p:commandButton ... />

成功登录后关闭对话框可由RequestContext#execute()完成。

RequestContext.getCurrentInstance().execute("dialog.hide()");

答案 1 :(得分:1)

答案 2 :(得分:0)

每次向服务器发出请求后,您的对话框都会重复。尝试设置对话框属性appendToBody="true",以防止这种情况发生。