1

しばらく問題があり、それを取り除くことができません。私のデータテーブルには、クリックすると詳細情報を含むダイアログを表示するためのボタンのある列があります。

ボタンを初めてクリックするとダイアログが開き、正しい値が表示されますが、同じ行またはその他のボタンを 2 回目にクリックすると、イベント ハンドラーfindStfPackが null 値属性を受け取るため、値が表示されません。

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>

結果は 2 つのシナリオで同じです。最初のイベント トリガーでは値が適切に渡されて表示されますが、2 番目のイベント トリガーではNullPointerException.

理由はわかりませんがupdate="search:dlgViewStfPackId"、値がないとダイアログに表示されません。

4

1 に答える 1