【问题标题】:Primefaces how to update content in a dialog and keep the dialog centered?Primefaces如何更新对话框中的内容并保持对话框居中?
【发布时间】: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",对话框会闪烁,好像它正在打开然后立即关闭。

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

【问题讨论】:

    标签: jsf jsf-2 primefaces


    【解决方案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:stackoverflow.com/questions/3284236/jsf-2-0-method-invocation/…
      • 服务员不会在这里买那个。我将不得不坚持使用属性/动作监听器。不过感谢您的建议。
      • 那就太糟糕了。即使只是在 webapp 自己的/WEB-INF/lib 中也不行?无论如何,没问题,不客气:)
      • 为什么update=":dialog" 中有一个: 而只是说update="dialog" 而没有:
      猜你喜欢
      • 2014-08-31
      • 2014-09-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多