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