使用对话框框架的primefaces对话框未弹出

使用对话框框架的primefaces对话框未弹出,primefaces,dialog-framework,Primefaces,Dialog Framework,我试图使用primefaces对话框框架来简化我的代码。我遵循了primefaces 4.0用户指南中的示例,但它不起作用 我几乎一字不差地复制了这个示例,创建了三个文件:一个包含对话框的文件、一个调用对话框的文件和一个支持bean文件 对话框文件名为“dialog.xhtml”,位于“/Test”文件夹中,包含: <html xmlns="http://www.w3.org/1999/xhtml" xmlns:h="http://java.sun.com/jsf/html"

我试图使用primefaces对话框框架来简化我的代码。我遵循了primefaces 4.0用户指南中的示例,但它不起作用

我几乎一字不差地复制了这个示例,创建了三个文件:一个包含对话框的文件、一个调用对话框的文件和一个支持bean文件

对话框文件名为“dialog.xhtml”,位于“/Test”文件夹中,包含:

<html xmlns="http://www.w3.org/1999/xhtml" 
      xmlns:h="http://java.sun.com/jsf/html"
      xmlns:p="http://primefaces.org/ui">
    <h:head>
        <title>Cars</title>
    </h:head>
    <h:body>
        Test dialog
    </h:body>
</html>
<html xmlns="http://www.w3.org/1999/xhtml"      
      xmlns:h="http://java.sun.com/jsf/html"
      xmlns:p="http://primefaces.org/ui">

    <h:head>
        <title>Test Dialog</title>
        <meta name="viewport" content="width=device-width"/>
    </h:head>
    <h:body>
        <h:form>
        <p:commandButton value="View Cars" actionListener="#{hostBean.view}" />
        </h:form>
    </h:body>
</html>
@ManagedBean
@SessionScoped
public class HostBean implements Serializable {

    public void view() {
        RequestContext.getCurrentInstance().openDialog("/Test/dialog");
    }
}
当我调试它时,会调用视图,但对话框不会打开。(我已将这三条线添加到faces上下文中。)


有什么想法吗?

我用以下代码实现了:

import java.io.Serializable;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;
import org.primefaces.context.RequestContext;

@ManagedBean
@ViewScoped
public class HostBean implements Serializable {

    public void view() {
        RequestContext.getCurrentInstance().openDialog("dialog");
    }
}
由于两个xhtml文件位于同一个文件夹(Test)中,因此不需要使用“/Test/dialog”(如果使用整个路径,则可以使其更为“全局”)

别忘了将其添加到faces-config.xml中:

<?xml version='1.0' encoding='UTF-8'?>
<faces-config version="2.2"
              xmlns="http://xmlns.jcp.org/xml/ns/javaee"
              xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
              xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-facesconfig_2_2.xsd">

    <application>
        <action-listener>org.primefaces.application.DialogActionListener</action-listener>
        <navigation-handler>org.primefaces.application.DialogNavigationHandler</navigation-handler>
        <view-handler>org.primefaces.application.DialogViewHandler</view-handler>
    </application>

</faces-config>

org.primefaces.application.DialogActionListener
org.primefaces.application.DialogNavigationHandler
org.primefaces.application.DialogViewHandler

您必须在页面标题中添加以下行:

<h:outputScript name="jquery/jquery-plugins.js" library="primefaces"/>

别担心-不要将任何文件复制到项目中-上面的行就足够了,因为PrimeFaces会自动添加js文件

正如您意识到的,您还必须在faces-config.xml文件中添加几行:

<application>
  <action-listener>org.primefaces.application.DialogActionListener</action-listener>
  <navigation-handler>org.primefaces.application.DialogNavigationHandler</navigation-handler>
  <view-handler>org.primefaces.application.DialogViewHandler</view-handler>
</application>

org.primefaces.application.DialogActionListener
org.primefaces.application.DialogNavigationHandler
org.primefaces.application.DialogViewHandler

我在您发布的任何xhtml文件中都看不到对话框代码。从我对《用户指南》的阅读来看,这就是对话框框架的要点。您可以使用框架在对话框中打开任何xhtml文件,只需指定其名称。使用标准primaces dialog有什么害处我注意到您使用的是2.2版。在我的配置文件中,它显示为2.1。我只是草率地将您的头复制到我的文件中,从而展示了subversion的“恢复修改”选项的价值。那么,您知道这个特性是否依赖于2.2吗?我相信它在2.1上可以正常工作。这部分才是真正重要的。你们只做过那个部分的测试吗?并没有,我是手工输入的,因为用户指南是pdf格式的,不允许复制。我将尝试复制该部分,尽管我相信它是正确的。@Daniel Camargo:-您的dialog.xhtml是否在WEB-INF文件夹中,只是为了确认它是否有效。我使用的是Primefaces 5.3,但弹出窗口没有出现。这就解决了问题。