Nested dialogs are supported to allow creating a dialog from another dialog. Demo here has 3 level of nested dialogs where last dialog returns data back to the root.
Documentation<h:form id="rootform"> <p:growl id="growl" showDetail="true" /> DialogReturn with Button:<br /> <p:commandButton id="btn" value="View" icon="pi pi-home" action="#{dfRootView.openLevel1}"> <p:ajax event="dialogReturn" listener="#{dfRootView.onReturnFromLevel1}" update="growl"/> </p:commandButton> <br /> <br /> DialogReturn with Link:<br /> <p:commandLink id="lnk" value="View" action="#{dfRootView.openLevel1}"> <p:ajax event="dialogReturn" listener="#{dfRootView.onReturnFromLevel1}" update="growl"/> </p:commandLink> <br /> <br /> DialogReturn with a Menu:<br /> <p:menu> <p:submenu label="Dialog Framework"> <p:menuitem value="View" action="#{dfRootView.openLevel1}"> <p:ajax event="dialogReturn" listener="#{dfRootView.onReturnFromLevel1}" update="growl"/> </p:menuitem> </p:submenu> </p:menu> </h:form>
@Named("dfRootView") @RequestScoped public class DFRootView { public void openLevel1() { Map<String,Object> options = new HashMap<String, Object>(); options.put("modal", true); PrimeFaces.current().dialog().openDynamic("level1", options, null); } public void onReturnFromLevel1(SelectEvent event) { FacesContext.getCurrentInstance().addMessage(null, new FacesMessage("Data Returned", event.getObject().toString())); } }