我有简单的数据表(Primefaces)。在此表中,最后一列包含一个应设置参数(f:param)的按钮。我正在使用p:commandButton和ajax =“true”参数。该按钮绑定到action(托管bean中的方法)。一切都很好,直到我第二次点击数据表中的按钮。那是为什么?
代码如下:
<p:dataTable id="zones" value="#{appointmentForm.matchingZones}"
var="zone" paginator="true" rows="10"
paginatorTemplate="{RowsPerPageDropdown} {FirstPageLink} {PreviousPageLink} {CurrentPageReport} {NextPageLink} {LastPageLink}"
emptyMessage="#{msg['label.noAvailableZones']}">
<p:column headerText="#{msg['label.choose']}">
<p:commandButton value="#{msg['label.choose']}"
actionListener="#{appointmentForm.handleChosenZone}" process="@this"
update=":verificationForm" ajax="true">
<f:param name="zoneId" value="#{zone.id}"/>
</p:commandButton>
</p:column>
</p:datatable>
当我第一次正确设置参数时,单击任何一行中的按钮,但在第二次我得到NullPointerException。
有什么想法吗?
答案 0 :(得分:0)
我在错误的地方寻找。 Zone是BaseEntity的子类,包含Id,创建日期等
如果你使用BaseEntity或类似的东西,请确保你记得序列化。就我而言,我有Zone:
public class Zone extends BaseEntity implements Serializable {
...
}
和BaseEntity:
public class BaseEntity {
@ID
@GeneratedValue
protected Long id;
...
}
因此id字段未被序列化。解决方案是添加公共类BaseEntity implements Serializable 。