来自bean的Primefaces对话框只显示一次

时间:2014-07-04 16:05:36

标签: jsf jsf-2 primefaces glassfish-4

我正在尝试显示来自bean的对话框,如PrimeFaces ShowCase中所述。事情是一切按预期工作,对话框显示,但如果我关闭对话框,然后再次按下按钮,除非页面刷新,否则对话框不会显示。

这不是示例中显示的行为,每次按下按钮时,对话框都会出现。

我在代码中唯一的区别是我使用了CDI替代品而不是托管bean包,因为{@ 1}}包将被弃用。我的意思是:

  • javax.faces.bean代替javax.inject.Named
  • javax.faces.bean.ManagedBean代替javax.faces.view.ViewScoped

在任何情况下,我也尝试过托管bean包,但仍然是相同的错误行为。

这是我到目前为止所做的:

的index.xhtml

javax.faces.bean.ViewScoped

ViewDialogMB.java

<?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://xmlns.jcp.org/jsf/html"
      xmlns:p="http://primefaces.org/ui">
    <h:head>
        <title>Facelet Title</title>
    </h:head>
    <h:body>
        <h:form>
            <p:commandButton value="Open" actionListener="#{viewDialogMB.viewDialog()}"/>
        </h:form>
    </h:body>
</html>

dialog.xhtml

import java.util.HashMap;
import java.util.Map;
import javax.faces.view.ViewScoped;
import javax.inject.Named;
import org.primefaces.context.RequestContext;


@Named(value = "viewDialogMB")
@ViewScoped
public class ViewDialogMB {

    public void viewDialog() {
        Map<String,Object> options = new HashMap<>();
        options.put("modal", true);
        options.put("resizable", true);

        RequestContext.getCurrentInstance().openDialog("dialog", options, null);
    }

}

faces-config.xml(根据Dialog Framework文档)

<?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://xmlns.jcp.org/jsf/html"
      xmlns:p="http://primefaces.org/ui">
    <h:head>
        <title>Dialog Title</title>
    </h:head>
    <h:body>
        <p:outputLabel value="Hello from Dialog!" />
    </h:body>
</html>

顺便说一下,我的平台(如果有所不同)是:

  • Glassfish 4
  • JSF 2.2
  • JDK 1.7 - 64位
  • Java EE 7
  • PrimeFaces 5.0(社区版)

我尝试使用Mozilla Firefox,Google Chrome和MS IE11。

2 个答案:

答案 0 :(得分:5)

此错误在Dialog Framework regression bug in PF 4.0.10 and higherIssue 6915: PF 5.0 error when closing DF window opened from DataTable

报告

作为一种解决方案,使用taconic的解决方案,即在体内添加面板。

您的 dialog.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://xmlns.jcp.org/jsf/html"
      xmlns:p="http://primefaces.org/ui">
    <h:head>
        <title>Dialog Title</title>
    </h:head>
    <h:body>
    <p:panel>
        <p:outputLabel value="Hello from Dialog!" />
     </p:panel>
    </h:body>
</html>

答案 1 :(得分:1)

尝试使用&lt;号码:对话框&GT;他们真的很方便。或者你可以做&#34; dic19&#34;说如下并禁用ajax

<p:commandButton ajax="false" value="Open" actionListener="#{viewDialogMB.viewDialog()}"/>