Primefaces如何更新对话框中的内容并保持对话框居中?

Posted

技术标签:

【中文标题】Primefaces如何更新对话框中的内容并保持对话框居中?【英文标题】:Primefaces how to update content in a dialog and keep the dialog centered? 【发布时间】:2012-05-26 10:14:52 【问题描述】:

我有一个在页面加载时不包含任何内容的对话框,我正在根据用户单击的链接动态设置对话框的内容。

<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",对话框会闪烁,好像它正在打开然后立即关闭。

如何更新对话框并使其以动态内容为中心?

【问题讨论】:

【参考方案1】:

我遇到了同样的问题。 更新对话框会使其消失并重新出现(并忘记它的位置)。

为了解决这个问题,我在对话框内容周围创建了一个包装标签。

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

【讨论】:

【参考方案2】:

onclick 在 ajax 请求之前执行。您需要改为在oncomplete 中打开对话框。这将在 ajax 请求和更新之后执行&lt;p:dialog&gt; 默认是隐藏的,除非它的 visible 属性评估为 true

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

与具体问题无关,您是否知道自 EL 2.2 起您可以将完全有价值的对象作为方法参数传递?这使得 &lt;f:attribute&gt;actionListener “hack”变得多余:

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

【讨论】:

我在 tomcat 6 上运行,它不支持 EL 2.2 吗? 哦,它没有。但是您可以为此安装 JBoss EL:***.com/questions/3284236/jsf-2-0-method-invocation/… 服务员不会在这里买那个。我将不得不坚持使用属性/动作监听器。不过感谢您的建议。 那就太糟糕了。即使只是在 webapp 自己的/WEB-INF/lib 中也不行?无论如何,没问题,不客气:) 为什么update=":dialog" 中有一个: 而只是说update="dialog" 而没有:

以上是关于Primefaces如何更新对话框中的内容并保持对话框居中?的主要内容,如果未能解决你的问题,请参考以下文章

对话框关闭事件后 Primefaces 更新组件

单击菜单后,PrimeFaces布局需要手动刷新

Primefaces确认对话框不更新数据表

JSF 2.0 更新 primefaces 对话框第一次不起作用

从对话框更新PrimeFaces数据表行

行未更新 - 对话框中的更新按钮(由 dataTable 中的按钮打开)