18

ページの読み込み時にコンテンツを含まないダイアログがあり、ユーザーがクリックしたリンクに基づいてダイアログ ボックスのコンテンツを動的に設定しています。

<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"と、ダイアログが開いてすぐに閉じているかのように点滅します。

ダイアログを更新して、動的コンテンツを中央に配置するにはどうすればよいですか?

4

2 に答える 2

42

はajax リクエストのonclickに実行されます。代わりにダイアログを開く必要があります。これは、ajax リクエストと更新の後に実行されます。つまり、その属性が評価されない限り、デフォルトで非表示になります。oncomplete<p:dialog>visibletrue

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

具体的な問題とは関係ありませんが、EL 2.2 以降、完全なオブジェクトをメソッド引数として渡すことができることをご存知ですか? これにより、<f:attribute>およびactionListener「ハック」が不要になります。

<p:commandLink value="Read more" action="#{content.getFullArticle(news)}" 
    update=":dialog" oncomplete="dlg.show()" />
于 2012-05-18T20:39:59.967 に答える
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>
于 2012-09-21T10:35:36.517 に答える