jsf - showcase - ¿Las interfaces principales cómo actualizar el contenido en un diálogo y mantener el diálogo centrado?
primefaces showcase (2)
El onclick
se ejecuta antes de la solicitud ajax. Necesitas abrir el diálogo en oncomplete
en oncomplete
lugar. Esto se ejecutará después de la solicitud y actualización de ajax. El <p:dialog>
está, por defecto, oculto a menos que su atributo visible
evalúe como true
.
<p:commandLink value="Read more" actionListener="#{content.getFullArticle}"
update=":dialog" oncomplete="dlg.show()">
Sin relación con el problema concreto, ¿es consciente de que puede pasar objetos de plena confianza como argumentos de método desde EL 2.2? Esto hace que <f:attribute>
y actionListener
"hack" superfluos:
<p:commandLink value="Read more" action="#{content.getFullArticle(news)}"
update=":dialog" oncomplete="dlg.show()" />
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.
<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 tengo es que cuando haces clic en el enlace "Leer más", se muestra el cuadro de diálogo, pero el cuadro de diálogo no está centrado en la página. Si cambio el atributo udpate en el CommandLink a update=":dialog"
, el diálogo parpadea como si se estuviera abriendo y luego cerrando de inmediato.
¿Cómo puedo actualizar el cuadro de diálogo y centrarlo con contenido dinámico?
Yo tuve el mismo problema. Actualizar el cuadro de diálogo lo hace desaparecer y reaparecer (y olvidar su posición).
Para resolverlo, creé una etiqueta de envoltorio 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>