2012-05-18 7 views
16

Ho una finestra di dialogo che non contiene contenuto sul caricamento della pagina e sto impostando dinamicamente il contenuto di una finestra di dialogo in base al collegamento su cui un utente fa clic.Primefacce su come aggiornare il contenuto in una finestra di dialogo e mantenere centrata la finestra di dialogo?

<p:dialog widgetVar="dlg" modal="true" id="dialog"> 
    <p:panel id="fullArticle"> 
     <h:outputText value="#{content.newsArticle}" escape="false" /> 
    </p:panel> 
</p:dialog> 
... 
... 
<p:commandLink value="Read more" actionListener="#{content.getFullArticle}" onclick='dlg.show();' update=":fullArticle"> 
    <f:attribute name="contentId" value="#{news.contentId}" /> 
</p:commandLink> 

Il problema che sto avendo è che quando si fa clic sul collegamento "Leggi tutto", mostra la finestra di dialogo, ma il dialogo non è centrato sulla pagina. Se cambio l'attributo udpate sul commandlink a update=":dialog", la finestra di dialogo lampeggia come se si aprisse e si chiudesse immediatamente.

Come posso aggiornare la finestra di dialogo e centrarla con il contenuto dinamico?

risposta

34

Il onclick viene eseguito prima della richiesta Ajax. È necessario aprire la finestra di dialogo in oncomplete. Questo verrà eseguito dopo la richiesta e l'aggiornamento ajax. <p:dialog> è nascosto per impostazione predefinita a meno che l'attributo visible non valuti true.

<p:commandLink value="Read more" actionListener="#{content.getFullArticle}" 
    update=":dialog" oncomplete="dlg.show()"> 

Estranei al problema concreto, sono a conoscenza che è possibile passare oggetti fullworthy come argomenti di metodo dal EL 2.2? Questo rende il <f:attribute> e actionListener "hack" superfluo:

<p:commandLink value="Read more" action="#{content.getFullArticle(news)}" 
    update=":dialog" oncomplete="dlg.show()" /> 
+0

Sono in esecuzione su Tomcat 6 e che non supporta l'EL 2.2, vero? – Catfish

+0

Oh, non è così. Ma potresti semplicemente installare JBoss EL per questo: http://stackoverflow.com/questions/3284236/jsf-2-0-method-invocation/3284328#3284328 – BalusC

+0

server guys non lo compreranno qui. Dovrò attenermi all'attributo/actionlistener. Grazie per il consiglio però. – Catfish

6

Ho avuto lo stesso problema. L'aggiornamento della finestra di dialogo lo fa scomparire e riapparire (e dimenticare la sua posizione).

Per risolvere il problema, ho creato un tag wrapper attorno al contenuto della finestra di dialogo.

<p:commandLink update=":playerViewDialogHeader,:playerViewDialogContent" 
       oncomplete='playerViewDialogJS.show()' value='#{item.name}' /> 


<p:dialog id='playerViewDialog' widgetVar='playerViewDialogJS'> 

    <f:facet name="header"> 
     <h:outputText id="playerViewDialogHeader" value="#{playerController.objectView.name}" /> 
    </f:facet> 

    <h:form id='playerViewDialogContent'> 
     <!-- CONTENT GOES HERE --> 
    </h:form> 

</p:dialog> 
Problemi correlati