2014-09-01 41 views
0

我試圖打開一個使用Primefaces 3.5的對話框。我創建了一個MenuBar和一個view.xhtml<p:dialog>。我想打開這個view.xhtml作爲對話模式。MenuBar打開一個對話框?

我使用:JSF2和Primefaces 3.5

我想這

<h:form> 
     <p:menubar> 
      <!-- cadastros --> 
      <p:submenu label="Cadastro"> 
       <p:submenu label="Participantes"> 
        <p:menuitem value="Aluno" /> 
        <p:menuitem value="Professor"/> 
       </p:submenu> 
       <p:separator/>     
       <p:menuitem value="Turma" onclick="#{menuMB.openDialog('/turma/view.xhtml')}"></p:menuitem>    
      </p:submenu> 
      <!-- termina cadastros --> 

      <!-- relatorios --> 
      <p:submenu label="Relatorios"> 

      </p:submenu>  
     </p:menubar> 

    </h:form> 

view.xhtml

<p:dialog header="Turmas" appendToBody="false" modal="true" widgetVar="turmaView"> 
    <h:form> 
     <h:outputLabel value="I am a modal" /> 
    </h:form> 
</p:dialog> 

託管bean

@ManagedBean 
public class MenuMB { 

    public void openDialog(String view){ 
     RequestContext.getCurrentInstance().execute("view.show()");  
    } 
} 

任何想法?

解決

view.xhtml

<p:dialog header="Turmas" widgetVar="turmaView" appendToBody="true" modal="true" resizable="false" draggable="false"> 
    <h:form> 
     <h:outputLabel value="I am a modal" /> 
    </h:form> 

</p:dialog> 

菜單欄

<h:form> 
      <p:menubar> 
       <p:submenu label="Cadastro"> 
         <p:submenu label="Participante"> 
          <p:menuitem value="Aluno"></p:menuitem> 
          <p:menuitem value="Professor"></p:menuitem> 
         </p:submenu>  
         <p:separator/> 
         <p:menuitem value="Turma" onclick="PF('turmaView').show()"/>          
       </p:submenu>    
      </p:menubar>   
    </h:form> 

    <ui:include src="/turma/view.xhtml"/> 

現在的作品。

回答

2

這是不可能執行服務器端方法包裝onclick聽衆或類似的。你對客戶端的JavaScript函數和服務器端監聽器感到困惑。根據PF docs

MenuItem有兩個用例,直接使用GET導航到一個url或執行一個POST來執行一個操作。

所以沒有辦法將它用於客戶端的特定目的,因爲它將執行一個請求。你可以做的是顯示在對話框它發生之後:

<html xmlns="http://www.w3.org/1999/xhtml" 
    xmlns:h="http://java.sun.com/jsf/html" 
    xmlns:f="http://java.sun.com/jsf/core" 
    xmlns:p="http://primefaces.org/ui"> 
<h:head /> 
<h:body> 
    <h:form> 
     <p:menubar> 
      <p:menuitem value="Turma" oncomplete="dlg.show();" /> 
     </p:menubar> 
     <p:dialog header="Modal Dialog" widgetVar="dlg" modal="true" 
      height="100"> 
      <h:outputText value="This is a Modal Dialog." /> 
     </p:dialog> 
    </h:form> 
</h:body> 
</html> 

這正常顯示的對話框中單擊該p:menuItem時。沒有偵聽器的ajax請求被執行,並且當它完成時,顯示它運行的javascript代碼。

+0

@BalusC改變了JS引用的對話框和命名空間;-) – 2014-09-01 15:02:17

+0

@BalusC我使用JSF2.2' \t \t \t com.sun.faces \t \t \t JSF-API \t \t \t 2.2.2 \t \t'和Primefaces 3.5還。 – FernandoPaiva 2014-09-01 16:10:19

+0

@BalusC我解決了這個問題,併發布我如何做。 – FernandoPaiva 2014-09-01 18:24:04