我有一个对话框,其中不包含页面加载的内容,而是根据用户点击的链接动态设置对话框的内容。
<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>
我遇到的问题是,当您单击“阅读更多”链接时,它会显示对话框,但对话框不在页面的中心。如果我将commandLink上的udpate属性更改为update=":dialog"
,则对话框会闪烁,就好像它正在打开然后立即关闭一样。
如何更新对话框并使其与动态内容对齐?
答案 0 :(得分:36)
在 ajax请求之前执行<{1}} 。您需要在onclick
中打开对话框。这将在 ajax请求和更新后执行。默认情况下,oncomplete
是隐藏的,除非其<p:dialog>
属性评估visible
。
true
无关,您是否意识到自EL 2.2以来您可以将完全对象作为方法参数传递?这使<p:commandLink value="Read more" actionListener="#{content.getFullArticle}"
update=":dialog" oncomplete="dlg.show()">
和<f:attribute>
“hack”变得多余:
actionListener
答案 1 :(得分:6)
我遇到了同样的问题。 更新对话框会使其消失并重新出现(并忘记其位置)。
为了解决这个问题,我在对话框内容周围创建了一个包装器标签。
<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>