Primefaces事件仅在第一次传递属性

时间:2017-04-14 07:10:34

标签: jsf primefaces jsf-2 pf-datatable

我有一段时间的问题,我无法摆脱它。在我的数据表中,我有一个带有按钮的列,用于显示一个对话框,其中包含有关点击的更多信息。

当我第一次点击按钮时,对话框会打开,并显示正确的值,但是当我第二次单击同一行或任何其他按钮上的按钮时,由于我的事件处理程序{{1}接收空值属性。

我尝试将findStfPack对象直接传递给方法作为参数:

PackageData

视图控制器中的处理程序方法:

<p:column width="60">
  <p:commandButton oncomplete="PF('dlgViewStfPack').show()" 
                   update="search:dlgViewStfPackId"
                   value=""
                   title="#{msg['button.search']}"
                   action="#{budgetViewFulfiledController.findStfPack(_item.stfPack)}"
                   process="@this"/>
</p:column>

或使用primefaces动作事件:

public void findStfPack(PackageData event){
  System.out.println("event: "+event.getPackId());
  stfPack= event;
}

视图控制器中的处理程序方法:

<p:column width="60">
  <p:commandButton oncomplete="PF('dlgViewStfPack').show()"
                   update="search:dlgViewStfPackId"
                   value=""
                   title="#{msg['button.search']}"
                   actionListener="#{budgetViewFulfiledController.findStfPack}"
                   process="@this">
    <f:attribute name="pack" value="#{_item.stfPack}"/>
  </p:commandButton>
</p:column>

对话框:

public void findStfPack(ActionEvent event){
  PackageData packageData= (PackageData)event.getComponent().getAttributes().get("pack");
  System.out.println("event: "+packageData.getPackId());
  stfPack= packageData;
}

结果在两个场景中是相同的:在第一个事件触发器上,值被正确传递并显示,但在第二个事件触发器上,我得到了<p:dialog id="dlgViewStfPackId" header="#{budgetViewFulfiledController.stfPack.staff.stfName} - Package salarial" modal="true" widgetVar="dlgViewStfPack"> <div class="groupDataBox"> <my:outputCurrentPackage currPack="#{budgetViewFulfiledController.stfPack}"/> </div> </p:dialog>

我应该指明,我不知道为什么但没有NullPointerException这些值没有显示在对话框中。

1 个答案:

答案 0 :(得分:0)

我不确切知道原因,但如果您不更新对话框,数据无法刷新,则会缓存最后的结果。 尝试改变这样:

<强> XHMTL

<p:column width="60">
    <p:commandButton oncomplete="PF('dlgViewStfPack').show()"
               update="@([$id=dlgViewStfPackId])"
               value=""
               title="#{msg['button.search']}"
               action="#{budgetViewFulfiledController.findStfPack(_item.stfPack)}"
               process="@this">

    </p:commandButton>
</p:column>

<强> JAVA

public void findStfPack(PackageData pd){
    System.out.println("event: "+pd.getPackId());
    this.stfPack= pd;
}

如果它无效,会尝试处理ID_TABLE