2012-05-18 4 views
16

Mam okno dialogowe, które nie zawiera żadnych treści przy ładowaniu strony i dynamicznie ustawiam zawartość okna dialogowego na podstawie łącza klikniętego przez użytkownika.Zasugeruje sposób aktualizowania zawartości w oknie dialogowym i utrzymywania centralnego okna dialogowego?

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

Problem mam jest to, że po kliknięciu w link „czytaj więcej”, to pokazuje okno, ale okno nie jest wyśrodkowany na stronie. Jeśli zmienię atrybut udpate w poleceniu Link do update=":dialog", okno będzie migać, jak gdyby było otwierane, a następnie zamykane od razu.

Jak mogę zaktualizować okno dialogowe i wyśrodkować je za pomocą dynamicznej zawartości?

Odpowiedz

34

Wykonanie onclick jest wykonywane przed przesłaniem zapytania przed. Zamiast tego należy otworzyć okno dialogowe pod numerem oncomplete. To zostanie wykonane po żądanie ajax i aktualizacji. Domyślnie <p:dialog> jest ukryty, chyba że jego atrybut visible ocenia true.

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

niezwiązane do konkretnego problemu, jesteś świadomy, że można przekazać fullworthy obiektów jako argumentów metoda od EL 2.2? To sprawia, że ​​<f:attribute> i actionListener "hack" zbędny:

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

Używam programu tomcat 6, który nie obsługuje języka EL 2.2? – Catfish

+0

Och, nie ma. Ale możesz po prostu zainstalować JBoss EL do tego: http://stackoverflow.com/questions/3284236/jsf-2-0-method-invocation/3284328#3284328 – BalusC

+0

Faceci serwera nie kupią tego tutaj. Będę musiał trzymać się atrybutu/actionlistener. Niemniej dziękuję za poradę. – Catfish

6

miałem ten sam problem. Aktualizacja okna powoduje zniknięcie i ponowne pojawienie się (i zapomnienie o pozycji).

Aby rozwiązać ten problem, utworzyłem etykietę otoki wokół zawartości okna dialogowego.

<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> 
Powiązane problemy