Диалог Primefaces с использованием диалогового окна не появляется

Я пытаюсь использовать диалоговые рамки простых лиц, чтобы упростить мой код. Я следовал примеру в руководстве пользователя primefaces 4.0, и он не работает.

Я скопировал пример почти дословно, создав три файла: файл с диалоговым окном в нем, файл, который вызывает диалог, и файл вспомогательного компонента.

Файл диалога называется "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>

Базовый файл с именем "testDialog.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>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");
    }
}

Когда я его отлаживаю, вызывается view, но диалог не открывается. (Я добавил три строки для лица-контекста.)

Есть идеи?

2 ответа

Я сделал это работать с этим кодом:

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" (вы можете сделать его более "глобальным", если вы используете весь путь).

Не забудьте добавить это к вашему лицу-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>

Вы должны добавить в заголовок своей страницы эту строку:

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

Не беспокойтесь - не копируйте никакие файлы в ваш проект - вышеуказанной строки достаточно, потому что PrimeFaces автоматически добавляет файл js.

Как вы поняли, вы также должны добавить несколько строк в ваш файл face-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>
Другие вопросы по тегам