Непрозрачность фона диалогового окна Primefaces удваивается, когда в диалоге происходит сбой - PullRequest
5 голосов
/ 30 января 2012

У меня есть модальное диалоговое окно страницы, которое отображается, если пользователь нажимает кнопку редактирования. Диалог запрашивает имя пользователя и пароль и имеет кнопку отправки. Если имя пользователя и пароль не подтверждены, отображается ошибка.

Проблема в том, что если имя пользователя и пароль не проходят проверку подлинности, модальный фон темнеет все больше и больше при каждом сбое проверки подлинности.

Что бы это вызвало?

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

3 голосов
/ 02 февраля 2012

Вы обновляете диалог каждый раз, не закрывая его сначала.Я не уверен, что это ошибка или функция, но из-за атрибута 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 голос
/ 03 февраля 2012

Эта ошибка была исправлена ​​в 3.1.Final;

http://code.google.com/p/primefaces/issues/detail?id=3426

0 голосов
/ 30 января 2012

Ваши диалоги дублируются после каждого запроса к серверу. Попробуйте установить атрибут диалога appendToBody="true", который должен предотвратить это.

...