2013-03-27 6 views
7

Ho un modulo con un pulsante che apre una Primafaces overlayPanel. Nel pannello c'è un altro pulsante che esegue un'azione Ajax e quindi chiude l'overlay.
Qui è una versione semplificata senza alcuna azione Ajax a tutti:Primefaces overlay dinamicoPannello che mostra una sola volta

<h:form> 
    <p:commandButton id="button1" value="Open overlay" type="button"/> 
    <p:overlayPanel for="button1" widgetVar="ovl" dynamic="true"> 
     <p:commandButton value="Close" oncomplete="ovl.hide();" 
         update="@form"/> 
    </p:overlayPanel> 
</h:form> 

Si prega di notare che il pannello deve avere dynamic="true" perché il contenuto dinamico devono essere recuperati in applicazione reale, e update="@form" è necessaria al fine di aggiornare altra forma componenti.

Il problema è: se ho entrambi gli atti, dynamic="true" e update="@form", la sovrapposizione viene visualizzata solo la prima volta. Dopo aver fatto clic sul pulsante "Chiudi", se provo a fare clic su "Apri sovrapposizione" ancora una volta, il pannello non verrà visualizzato.

Cosa sto sbagliando?

(utilizzando primefaces 3.5 e GlassFish 3.1.2.2)

risposta

0

Quello che ho notato con codice qui sotto è appena fate aggiornamento sul modulo che contiene il-Overlay-pulsante Apri, si rompe.

<h:form> 
    <p:commandButton id="button1" value="Open overlay" type="button"/> 
    <p:commandButton value="break things" update="@form" /> 
    <p:overlayPanel for="button1" dynamic="true"> 
     <p:commandButton value="Close" update="@form" /> 
    </p:overlayPanel> 
</h:form> 

se va bene per dividere la forma in due, il pulsante incorporato nel OverlayPanel, potrebbe tentare di richiamare clic sul pulsante utilizzato per attivare o disattivare la sovrapposizione. Forse qualcosa in linea con sotto.

<h:form> 
    <p:commandButton id="button1" value="Open overlay" type="button"/> 
    <p:overlayPanel for="button1" dynamic="true" > 
     <p:commandButton value="Close" update=":formToBeUpdated" onclick="document.getElementById('button1').click();"/> 
    </p:overlayPanel> 
</h:form> 

<h:form id="formToBeUpdated"> 
    <h:inputText value="bleh"/> 
</h:form> 
+0

Grazie Aksel. Sfortunatamente l'overlay fa parte di un componente composito utilizzato in molte viste diverse, quindi deve essere ospitato dall'elemento parent form: non può definire la propria forma perché finirei con moduli nidificati. – yankee

13

Usa onclick="widgetVar.loadContents()" nel pulsante di scendere il overlaypanel, dove widgetVar è il VaR del overlayPanel.

+1

Grazie ha funzionato. Come hai trovato questo metodo, non elencato nella Guida dell'utente di Primefaces. –

+2

Aggiornato: onclick = "PF ('widgetVar'). LoadContents();" – Koekiebox

0

Si dovrebbe dare al proprio overlayPanel un ID e per completare il pulsante mostrarlo. Il codice è simile al seguente:

<h:form> 
    <p:commandButton id="button1" value="Open overlay" type="button" oncomplete="PF('ovlID').show()"/> 
    <p:overlayPanel id="ovlID" for="button1" widgetVar="ovl" dynamic="true"> 
     <p:commandButton value="Close" oncomplete="ovl.hide();" 
        update="@form"/> 
    </p:overlayPanel> 
</h:form>