f:在第二次ajax调用期间未设置param

时间:2013-06-09 19:58:40

标签: ajax jsf primefaces

我有简单的数据表(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。

有什么想法吗?

1 个答案:

答案 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