【发布时间】:2017-09-10 10:33:03
【问题描述】:
我遇到了一段时间的问题,但我无法摆脱它。在我的数据表中,我有一列带有一个按钮,用于显示一个对话框,其中包含有关点击的更多信息。
当我第一次单击按钮时,对话框以正确的值打开,但是当我第二次单击同一行的按钮或任何其他按钮时,值不会显示,因为我的事件处理程序 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",值不会显示在对话框中。
【问题讨论】:
-
嗨,minimal reproducible example 请...以及 PrimeFaces 的版本信息以及 jsf 的版本和实现
标签: jsf primefaces jsf-2 primefaces-datatable