2012-06-22 29 views
5

Ich benutze Primefaces 3.3.1 und JSF 2 (Mojarra 2.1.9).Erstellen PrimeFaces-Dialoge dynamisch

Ich habe eine Seite mit einer DataTable-Komponente und Dialog, um Details von DataTable-Einträgen anzuzeigen. Das ist sehr einfach, wenn ich einen Dialog habe. Was ich will, ist zu versuchen, Benutzern zu erlauben, zwei oder drei dailogs mit Details von verschiedenen Einträgen in der gleichen Zeit zu öffnen. Hat jemand eine Idee, wie man den gesamten Dialog mit AJAX vom Server bekommt, nicht nur einen Dialoginhalt?

+0

Duplikat von http://stackoverflow.com/questions/8682277/how-to-programmatical-add-dialogs-with-primefaces – rags

+1

Ich sah schon diese Frage, aber mein Problem ist etwas anders. Der Hauptunterschied besteht darin, dass ich dem Benutzer erlauben möchte, mehrere Dialoge gleichzeitig zu öffnen, so dass ich die Dialoge auf der Seite nicht hart codieren kann. Die einzige Möglichkeit besteht darin, einen Dialog für jeden Eintrag in der Tabelle zu haben, der wegen Netzwerk-Overhead nicht gut ist, und auch unmöglich für eine Lazy-Loaded-Tabelle. – partlov

+0

Haben Sie eine Lösung gefunden? – atamanroman

Antwort

6

Ja, tat ich. Zu diesem Zweck habe ich notwendige Dialoge programmatisch in Backing Bean erstellt. Ich weiß, das ist nicht wirklich beste Praxis, aber in diesem Moment denke ich, dass dies nur eine mögliche Lösung ist. Zuerst habe ich ein Gruppen-Panel hinzugefügt, das Container für Dialoge auf meiner JSF-Seite ist. Dann auf Bohnen Sicherung habe ich einige Code wie folgt aus:

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

Dialog ID kann auch dynamisch sein, so können Sie eine ID oder einen anderen Wert erstellen und ihm geben.

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

und Aufruf über die Schaltfläche;

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

@newuserua Ihr Code nicht funktioniert widgetVar Wert gefassten nur einmal beim Laden der Seite

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

die obige Zeile aktualisiert komplette Panel seine erfrischende alle der vorhandene Dialog und seine Inhalte.