2014-09-01 75 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