2012-05-18 89 views
16

Tengo un cuadro de diálogo que no contiene contenido en la carga de la página y estoy configurando dinámicamente el contenido de un cuadro de diálogo basado en el enlace en el que un usuario hace clic.Primefaces cómo actualizar el contenido en un diálogo y mantener el diálogo centrado?

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

El problema que estoy teniendo es que cuando se hace clic en el enlace "Leer más", se muestra el cuadro de diálogo, pero el diálogo no está centrada en la página. Si cambio el atributo udpate en el comando Enlace a update=":dialog", el cuadro de diálogo parpadea como si se abriera y luego se cerrara de inmediato.

¿Cómo puedo actualizar el diálogo y centrarlo en contenido dinámico?

Respuesta

34

onclick se ejecuta antes de ajax request. En su lugar, debe abrir el cuadro de diálogo en oncomplete. Esto se ejecutará después de solicitud y actualización de ajax. El <p:dialog> está oculto por defecto a menos que su atributo visible evalúe true.

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

Sin relación al problema concreto, ¿está usted consciente de que puede pasar objetos fullworthy como argumentos del método puesto EL 2.2? Esto hace que el <f:attribute> y actionListener "piratear" superflua:

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

Estoy ejecutando en tomcat 6 y eso no es compatible con el EL 2.2 ¿o sí? – Catfish

+0

Oh, no es así. Pero solo podría instalar JBoss EL para eso: http://stackoverflow.com/questions/3284236/jsf-2-0-method-invocation/3284328#3284328 – BalusC

+0

los chicos del servidor no comprarán ese aquí. Tendré que seguir con attribute/actionlistener. Gracias por el consejo sin embargo. – Catfish

6

que tenían el mismo problema. La actualización del cuadro de diálogo lo hace desaparecer y volver a aparecer (y olvida su posición).

Para resolverlo, creé una etiqueta contenedora alrededor del contenido del diálogo.

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