primefaces ajax 不工作

prime faces ajax not working

我们有一个包含以下 JAR 版本的 JSF 项目:

  1. Prime Faces 5.1
  2. JSF 2.0
  3. Javaee-api5
  4. 但是 Project Facets(在 eclipse 中)定义了 JSF 2.2,我们从未更改过它。
  5. JPA 2 (javaee-api 5)
  6. Ejb 3.0

我们的 ajax 不工作。

<p:selectOneRadio id="enrolledInPlanFlag" value="#{phInfoBean.enrldPlanFlag}"  label="Action" >
 <f:selectItem itemLabel="Yes" itemValue="Yes" />
 <f:selectItem itemLabel="No" itemValue="No" />
 <p:ajax  process="enrolledInPlanFlag" update="@form"/>
</p:selectOneRadio>

<p:dialog id="dialog" header="APTC Warning" widgetVar="dlg1" modal="true" height="200" width="500" resizable="false" rendered="#{phInfoBean.enrldPlanFlag eq 'Yes'}">

我正在尝试显示基于 selectOneRadio 的对话框。但是 AJAX 不工作,我们有奇怪的情况,有时它工作,有时它不。

我们已经用 @ViewScoped 注释了托管 bean。

请帮忙。

  • 让它发挥作用

您从不在代码中显示对话框。您可以将 oncomplete 事件附加到您的 p:ajax

 <p:ajax process="enrolledInPlanFlag" update="@form" oncomplete="PF('dlg1') != null ? PF('dlg1').show() : ''" />

条件 PF('dlg1') != null 是必需的,就好像您选择 "No" 您的对话框不再在您的页面中呈现,因此 PF('widgetVarOfDialog') 无法访问。

  • 补充说明

我会通过以下方式改进此代码:

  1. enrldPlanFlag 更改为布尔值而不是字符串(更清洁的 IMO)
  2. 如果布尔值为真,则在侦听器中以编程方式显示对话框(从您的 p:ajax 调用)

为什么?将逻辑保留在您的 bean 而不是 .xhtml 页面中