Диалоговое окно Primefaces не отображается

Еще один пост о первоочередных диалогах.

Я смотрел все эти предыдущие сообщения:

Платформа Primefaces Dialog Framework - не работает

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

Основа диалога Primefaces не работает при использовании слушателя ajax

Я пробовал все это, но диалог все равно не появляется.\

я использую primefaces 5.1,

Позвольте мне добавить некоторые детали.

Страница с кнопкой, которая должна вызвать диалог:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
         "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<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:ui="http://java.sun.com/jsf/facelets"
      xmlns:p="http://primefaces.org/ui" >

  <h:form>
      <p:commandButton 
         value="prova popup" 
         actionListener="#{codTribEr.chooseCodiceErario('/popup/codice-erario.xhtml')}">
      </p:commandButton>
  </h:form>

</html>

Java-код:

package it.iwb.ubiss.poc.popup;

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

@ManagedBean(name="codTribEr")
@ViewScoped
public class CodiceTributoErario implements Serializable{

    private static final long serialVersionUID = 1L;

    public void chooseCodiceErario(String s) {
            RequestContext.getCurrentInstance().openDialog(s);
    }
}

1 ответ

Вы используете неверную структуру JSF.

  1. Вы не использовали стандартные теги JSF (h:head, h:body).
  2. Вы не можете передать параметр через аргумент actionListener, потому что actionListener принимает только параметр ActionEvent. Если вы хотите передать параметр через actionListener, вы можете добиться f:attribute

Пример кода показан ниже.

XHTML

<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<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>
        <title>prova popup</title>
    </h:head>

    <h:body>
        <h:form>
            <p:commandButton value="prova popup" 
                             actionListener="#{codTribEr.chooseCodiceErario}"
                             >
                <f:attribute name="url" value="/popup/codice-erario.xhtml" />
            </p:commandButton>
        </h:form>
    </h:body>

</html>

managedbean

package it.iwb.ubiss.poc.popup;

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

@ManagedBean(name = "codTribEr")
@ViewScoped
public class CodiceTributoErario implements Serializable {

    private static final long serialVersionUID = 1L;

    public void chooseCodiceErario(ActionEvent event) {
        String url = (String)event.getComponent().getAttributes().get("url");
        System.out.println(url);
        RequestContext.getCurrentInstance().openDialog(url);
    }
}

Codice-erario.xhtml

<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<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>
        <title>codice-erario</title>
    </h:head>

    <h:body>
        Show codice-erario.xhtml
    </h:body>

</html>
Другие вопросы по тегам