2012-06-22 16 views
5

Używam primefaces 3.3.1 i JSF 2 (Mojarra 2.1.9).Dynamicznie twórz okna dialogowe PrimeFaces

Mam stronę z komponentem DataTable i oknem dialogowym, aby wyświetlić szczegóły wpisów DataTable. To bardzo proste, gdy mam jedno okno dialogowe. Chcę tylko umożliwić użytkownikom otwieranie dwóch lub trzech dailogów ze szczegółami różnych wpisów w tym samym czasie. Czy ktoś ma pomysł, jak uzyskać całe okno dialogowe z AJAX z serwera, a nie tylko zawartość okna dialogowego?

+0

Duplikat http://stackoverflow.com/questions/8682277/how-to-programmatically-add-dialogs-w-primefaces – rags

+1

Już widziałem to pytanie, ale mój problem jest nieco inny. Główną różnicą jest to, że chcę zezwolić użytkownikowi na otwieranie większej liczby okien dialogowych w tym samym czasie, więc nie mogę sztywno zakodować okien dialogowych na stronie. Jedyną możliwością jest posiadanie jednego okna dialogowego dla każdego wpisu w tabeli, który nie jest dobry z powodu obciążenia sieci, a także niemożliwie dla leniwego załadowanego stołu. – partlov

+0

Czy znalazłeś rozwiązanie? – atamanroman

Odpowiedz

6

Tak, zrobiłem. W tym celu utworzyłem niezbędne dialogi programowo w backingu bean. Wiem, że to nie jest najlepsza praktyka, ale w tym momencie myślę, że to tylko możliwe rozwiązanie. Przede wszystkim dodałem jeden panel grupy, który jest kontenerem dla okien dialogowych na mojej stronie JSF. Następnie na kopii fasoli mam trochę kodu:

UIComponent panelGroup = facesContext.getViewRoot().findComponent("panel_id"); 
Dialog dialog = new Dialog(); 
dialog.setHeader("Sample"); 
dialog.setVisible(true); 
dialog.setMinimizable(true); 
... 
panelGroup.getChildren().add(dialog); 
... 
RequestContext requestContext = RequestContext.getCurrentInstance(); 
requestContext.update("panel_id"); 
3

Identyfikator okna dialogowego również może być dynamiczny, dzięki czemu można utworzyć identyfikator lub inną wartość i nadać mu go.

<p:dialog header="Choose Delimiter Type" id="dialog" 
    widgetVar="exportDialog#{p.Id}" resizable="false" > 

i wywoływanie za pomocą przycisku;

<p:commandButton id="id" value="xxx" 
      actionListener="#{p.export2CSV}" ajax="false" 
      onclick="exportDialog#{p.tabId}.show()">     
     </p:commandButton> 
0

@newuserua Twój kod nie działa wartość widgetVar jest setted tylko raz podczas wczytywania strony

... 
requestContext.update("panel_id"); 

powyższa linia zaktualizowany kompletny panel jego orzeźwiający wszystko istniejący dialog i jego zawartość.

Powiązane problemy