我有一段时间遇到问题,我无法摆脱它。在我的数据表中,我有一个带有按钮的列,用于显示一个对话框,其中包含有关单击的更多信息。
当我第一次单击按钮时,对话框以正确的值打开,但是当我第二次单击同一行的按钮或任何其他按钮时,不会显示值,因为我的事件处理程序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"
值不会显示在对话框中。