【问题标题】:How to programmatically open PrimeFaces-Dialog?如何以编程方式打开 PrimeFaces-Dialog?
【发布时间】:2014-12-23 10:43:10
【问题描述】:

我知道有很多关于这个主题的问题,但没有一个可以帮助我。

我只想通过我的托管 bean 打开一个对话框,因为我需要一个普通对象来处理,所以我想要一个 actionListener,它会生成一个新对象然后打开对话框。

问题:它不起作用。为什么?我不知道。

我在任何控制台中都没有收到任何错误。没有 JS 错误,我的 Tomcat 控制台中没有任何内容,他的日志中没有任何内容。而且我非常非常确定它应该以这种方式工作。

这是我做的:

“添加”-按钮:

<p:outputPanel style="float:right">
<p:commandButton value="Hinzufügen" icon="ui-icon-plusthick"
    actionListener="#{lessonTypeController.addLessonTypeDialog}" />
</p:outputPanel>

actionListener 如下所示:

public void addLessonTypeDialog() {

    lessonType = new LessonType();
    lessonType.setTypicalDuration(getTypicalDuration());
    RequestContext context = RequestContext.getCurrentInstance();
    context.execute("PF('addLessonTypeDialog').show()");

}

以及应该打开(但不想打开)的对话框:

<p:dialog header="Add a lessontype"
    id="addLessonTypeDialog" widgetVar="addLessonTypeDialog"
    minHeight="600" modal="true" draggable="false" resizable="false">
    <p:ajax event="close" update="@form" />
    <p:outputPanel>
        ... Some content which works fine if dialog is called different
    </p:outputPanel>
</p:dialog>

对话框与调用按钮放置在同一个 xhtml 页面中。

我真的不知道为什么这不起作用。正如我所说,我真的非常确定这样是正确的。也没有错误。当我点击按钮时没有任何反应。

其他一切都很好,我也使用自己的 xhtml 页面中的对话框,这很好,但现在必须重构,因为我需要关闭事件来更新表单。

如果我直接通过 JS 调用对话框(就像我在 bean 中所做的那样,只是使用按钮的 onlick 事件)它可以工作,但是我遇到了问题,因为 actionListener 不够快,无法在JS 已经显示了导致错误和 NullPointerExceptions 的对话框。

请帮帮我,这是学校的一个重要项目,我必须一个人完成,因为我的伙伴们什么都不做,我真的不知道该怎么办。

【问题讨论】:

  • stackoverflow 项目完成站点了吗?
  • 我不知道编程问题发生在哪里很重要。如果它让你开心,我会在上面投入大量空闲时间。
  • 两个建议:第一:更新commandButton中的对话框(update="dialogId")。秒:在&lt;p:dialog&gt;中添加appendToBody="true"

标签: javascript jsf primefaces


【解决方案1】:

我知道在以前的一些版本中,当您的 widgetVarid 具有相同的值时,会发生奇怪的事情。因此,尝试更改其中一个,看看它是否有效:

context.execute("PF('wAddLessonTypeDialog').show()");

<p:dialog id="addLessonTypeDialog" widgetVar="wAddLessonTypeDialog" ...

引用 Primefaces 的作者,来自this thread

不要给组件id和widgetVar同名。

【讨论】:

  • 您好,感谢您的回复。实际上,我一开始就采用了这种方式,但随后进行了一些尝试和错误,并使两者都相同。我按照您的建议进行了更改,并尝试通过 ID 和 widgetVar 调用它(使用了 widgetVar,对吗?),但它没有改变任何东西。
  • 是的,使用了 widgetVar。 actionListener 会被执行吗?
  • 它...不是。这没有任何意义,我有更多带有更多按钮的页面,他们正在呼叫他们的听众。我现在将调试它,感谢您的提醒。我仍然不知道出了什么问题。
  • 尝试将process="@this" 放在按钮上,看看是否有帮助。
  • 是的!哦,上帝,它有帮助。谢谢!真的。你介意解释一下为什么我在这个设置中需要它吗?没有它,其他按钮也能正常工作。
【解决方案2】:

配置呢?试试checking that your faces-config contains the Dialog Framework Configuration (Page 519 in the Primefaces 5.1 Users Guid, it's easy to miss):

<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 不包含任何这些,问题已经解决,没有它也可以正常工作。
猜你喜欢
  • 1970-01-01
  • 2019-01-31
  • 1970-01-01
  • 2016-06-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-27
  • 2014-06-29
相关资源
最近更新 更多