2012-01-30 16 views
5

Ho una finestra di dialogo modale della pagina che viene visualizzata se un utente fa clic su un pulsante di modifica. La finestra di dialogo richiede nome utente e password e ha un pulsante di invio. Se il nome utente e la password non vengono confermati, viene visualizzato un errore.L'opacità dello sfondo della finestra di dialogo Primefaces viene raddoppiata quando l'azione non riesce nella finestra di dialogo

Il problema è che se il nome utente e la password non si autenticano, lo sfondo modale si scurisce sempre di più ogni volta che l'autenticazione fallisce.

Cosa potrebbe causare?

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

risposta

3

Si sta aggiornando la finestra di dialogo ogni volta senza prima chiuderla. Non sono sicuro che si tratti di un bug o di una funzionalità, ma a causa dell'attributo visible, l'overlay viene reinizializzato su ogni aggiornamento di finestra di dialogo. Si consiglia di segnalarlo ai ragazzi PrimeFaces insieme a un banco di prova più compatto.

La soluzione più semplice è chiudere semplicemente la finestra di dialogo sul successo di ajax. Verrà visualizzato di nuovo più velocemente di quanto l'utente finale possa ammiccare agli occhi.

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

Avrete probabilmente solo bisogno di perfezionare la visible e rendered attributi per assicurarsi che la finestra di dialogo viene riaperto quando la convalida non è riuscita (ad esempio quando l'utente non è ancora registrato).

Un'alternativa è aggiornare il modulo di dialogo anziché la finestra di dialogo stessa.

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

O semplicemente rimuovere completamente questo attributo. Il valore predefinito è @form.

<p:commandButton ... /> 

chiudere la finestra di login sul successo potrebbe allora essere fatto da RequestContext#execute().

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

Rimozione della finestra di dialogo 'update =" "funzionante. Grazie. – Catfish

+0

Prego. – BalusC

0

Le finestre di dialogo vengono duplicate dopo ogni richiesta al server. Prova a impostare l'attributo di dialogo, appendToBody="true", che dovrebbe impedire che ciò accada.

+0

Ho aggiunto che, ma non ha fatto nulla di diverso. – Catfish

Problemi correlati