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 请求和更新之后执行。 <p:dialog>
默认是隐藏的,除非它的 visible
属性评估为 true
。
<p:commandLink value="Read more" actionListener="#content.getFullArticle"
update=":dialog" oncomplete="dlg.show()">
与具体问题无关,您是否知道自 EL 2.2 起您可以将完全有价值的对象作为方法参数传递?这使得 <f:attribute>
和 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如何更新对话框中的内容并保持对话框居中?的主要内容,如果未能解决你的问题,请参考以下文章