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>

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

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

或使用 primefaces 动作事件:

<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.

我应该指定,我不知道为什么,但没有update="search:dlgViewStfPackId"值不会显示在对话框中。

4

1 回答 1

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

于 2017-04-14T10:12:23.913 回答