主要面临ajax无法正常工作

时间:2015-03-13 06:48:47

标签: jsf-2 primefaces

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

  1. Prime Faces 5.1
  2. JSF 2.0
  3. Javaee-api 5
  4. 但Project Facets(在eclipse中)定义了JSF 2.2,我们从未改变它。
  5. JPA 2(javaee-api 5)
  6. Ejb 3.0
  7. 我们的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。

    请帮忙。

1 个答案:

答案 0 :(得分:0)

  • 让它发挥作用

您永远不会在代码中显示对话框。您可以在oncomplete

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

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

  • 附加说明

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

  1. enrldPlanFlag更改为布尔值而不是字符串(更清洁的IMO)
  2. 如果布尔值为true,则在侦听器中以编程方式显示对话框(从p:ajax调用)
  3. 为什么呢?将逻辑留在bean而不是.xhtml页面