0

我有简单的数据表(Primefaces)。在此表中,最后一列包含一个应设置参数 (f:param) 的按钮。我正在使用带有 ajax="true" 参数的 p:commandButton。该按钮绑定到操作(托管 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。

有任何想法吗 ?

4

1 回答 1

0

我找错地方了。Zone 是 BaseEntity 的子类,其中包含 Id、创建日期等

如果您使用 BaseEntity 或类似的东西,请确保您记住序列化。就我而言,我有区域:

public class Zone extends BaseEntity implements Serializable {
    ...
}

和 BaseEntity:

public class BaseEntity {
    @ID
    @GeneratedValue
    protected Long id;
    ...
}

所以 id 字段没有被序列化。解决方案是添加公共类 BaseEntity实现 Serializable

于 2013-07-22T12:00:46.630 回答