【问题标题】:Primefaces closedialog from back bean: java.lang.NullPointerException: Argument Error: Parameter key is null来自后端 bean 的 Primefaces 关闭对话框:java.lang.NullPointerException:参数错误:参数键为空
【发布时间】:2015-08-21 14:38:51
【问题描述】:

我有一个 Primefaces(版本 5)对话框与我的 bean 的属性绑定:

    <p:dialog 
    id="dialog"   
    widgetVar="myDialog" 
    modal="true" 
    resizable="false"
    appendTo="@(body)"
    binding="#{bean.dialog}"
>
...
<p:commandButton    
                id="cmdButton"
                action="#{bean.test()}" 
                value="Save"
                disabled="false" />

我的back bean方法是:

@ViewScoped
private Dialog dialog;
public Dialog getDialog() {
        return dialog;
}
public void setDialog(Dialog dialog) {
        this.dialog = dialog;
}

public void test( ) 
{
    RequestContext rc = RequestContext.getCurrentInstance();
    rc.execute("PF('myDialog').hide();");
    rc.closeDialog(dialog);

}   

当它运行时,在返回 bean 中调用 closeDialog 时出现异常:

警告:java.lang.NullPointerException:参数错误:参数键为空

尽管如此,我的对话框正确关闭。

为什么会出现这个异常?

提前致谢。

【问题讨论】:

  • 你为什么用@ViewScoped注释字段private Dialog dialog;
  • 确认一下,为什么要从后台 bean 关闭对话框?
  • 对于 Tiny:我的 bean 上设置了 @ViewScoped 注释
  • 对于 WitYoBadSelf:我在 xhtml 页面中的对话框有一个表单,可以通过按钮保存插入一些信息。这个按钮调用一个 bean 支持方法,将数据存储在数据库中,最后必须关闭 Dialog。

标签: jsf primefaces dialog


【解决方案1】:

PrimeFaces 有两种类型的对话框实现:

  1. p.dialog(和你一样):对话可见性是通过使用客户端 api 的 show() 和 hide() 方法来管理的。
  2. 对话框框架:在运行时动态生成的外部页面中显示的对话框。

回答您的问题: 1. “rc.closeDialog(dialog);”引发的异常;应该在对话框框架中使用。例如

public void selectResultFromDialog(Object result) {
    RequestContext.getCurrentInstance().closeDialog(result);
}

这将关闭对话框并将所选对象返回到父页面。

  1. 为什么我的对话框正确关闭? rc.execute("PF('myDialog').hide();") 关闭了实际上隐藏它的对话框。

对于你的解决方案,我建议你使用对话框架。

【讨论】:

  • 我不能使用对话框框架...这是唯一的解决方案吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-12
  • 1970-01-01
  • 1970-01-01
  • 2014-12-04
  • 1970-01-01
相关资源
最近更新 更多