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

Jsf Primefaces事件传递属性仅第一次,jsf,primefaces,jsf-2,primefaces-datatable,Jsf,Primefaces,Jsf 2,Primefaces Datatable,我有一段时间的问题,我无法摆脱它。在我的数据表中,我有一个带有按钮的列,单击该列可显示包含更多信息的对话框 当我第一次单击按钮时,对话框将打开,显示正确的值,但当我第二次单击同一行或任何其他按钮时,不会显示值,因为我的事件处理程序findStfPack接收空值属性 我试图将要直接显示的PackageData对象作为参数传递给方法: <p:column width="60"> <p:commandButton oncomplete="PF('dlgViewStfPack').

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

当我第一次单击按钮时,对话框将打开,显示正确的值,但当我第二次单击同一行或任何其他按钮时,不会显示值,因为我的事件处理程序
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操作事件:

<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>
对话框:

<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”
对话框中不会显示值。

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

xhtml

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

如果它不工作,尝试处理ID_表

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

xhtml

<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>
如果它不工作,尝试处理ID\u表

您好,请。。。PrimeFaces的版本信息和jsf pleaseHi的版本和impl,请。。。PrimeFaces的版本信息和jsf的版本和impl请记住,它确实像OP所说的那样工作过一次,OP这样做:
update=“search:dlgViewStfPackId”
,我认为这是在更新对话框,所以最多它的值是错误的,也许可以将其添加到您的答案中,但是在这种情况下,这个问题是OP的重复,OP应该会得到一个错误(可能取决于是否在开发模式下运行),如果没有update属性,它甚至不会工作一次,所以它是“ok”的。请记住,它会像OP所说的那样工作一次,OP会这样做:
update=“search:dlgViewStfPackId”
在我看来,这是在更新对话框,因此最多对话框中的值是错误的,可以将其添加到您的答案中,但在这种情况下,这个问题是重复的,OP应该会得到一个错误(可能取决于是否在开发模式下运行),如果没有update属性,它甚至不会工作一次,因此它是“ok”
<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>
public void findStfPack(PackageData pd){
    System.out.println("event: "+pd.getPackId());
    this.stfPack= pd;
}