2012-01-30 30 views
5

Tengo un diálogo modal de página que se procesa si un usuario hace clic en un botón de edición. El cuadro de diálogo solicita el nombre de usuario y la contraseña, y tiene un botón de enviar. Si el nombre de usuario y la contraseña no se validan, se mostrará un error.La opacidad del fondo del cuadro de diálogo Primefaces se duplica cuando falla la acción en el cuadro de diálogo

El problema es que si el nombre de usuario y la contraseña no se autentican, el fondo modal se oscurece más y más cada vez que falla la autenticación.

¿Qué podría causar eso?

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

Respuesta

3

Está actualizando el cuadro de diálogo cada vez sin antes cerrarlo. No estoy seguro de si es un error o una función, pero debido al atributo visible, la superposición se reinicializa en cada actualización de diálogo. Es posible que desee informar a los chicos PrimeFaces junto con un caso de prueba más compacto.

La solución más sencilla es cerrar el diálogo sobre el éxito de ajax. Se volverá a mostrar más rápido de lo que el usuario final puede parpadear.

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

Es probable que sólo se necesita ajustar la visible y rendered atributos para asegurarse de que el diálogo se vuelve a abrir cuando la validación falló (por ejemplo, cuando el usuario aún no ha iniciado sesión).

Una alternativa es actualizar el formulario del diálogo en lugar del diálogo mismo.

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

O simplemente elimine ese atributo por completo. Ya está predeterminado en @form.

<p:commandButton ... /> 

cerrar el diálogo de inicio de sesión exitoso, entonces se podría hacer por RequestContext#execute().

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

Eliminando el diálogo 'update =' "' trabajado. Gracias. – Catfish

+0

De nada. – BalusC

0

Sus diálogos se están duplicando después de cada solicitud al servidor. Intente configurar el atributo de diálogo, appendToBody="true", que debería evitar que esto ocurra.

+0

Añadí eso pero no hizo nada diferente. – Catfish

Cuestiones relacionadas